APUE学习之进程控制 - fork 与 vfork】的更多相关文章

最后编辑: 2019-11-6 版本: gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.11) 一.进程标识 每一个进程都有一个唯一的非负整数的ID, 该类型为 pid_t. 当进程退出或者被杀死后,进程 ID 会被系统复用. 与文件句柄不同的是,大多操作系统使用的是延迟复用算法,这为了避免新的进程被误认为是某个已经被中止的先前进程.(顺次向下使用). 系统中存在一些专有进程,例如 ID = 0 的调度进程(交换进程 swapper…
1. 进程标识符 在前面进程描述一章节里已经介绍过进程的两个基本标识符pid和ppid,现在将详细介绍进程的其他标识符. 每个进程都有非负的整形表示唯一的进程ID.一个进程终止后,其进程ID就可以再次使用了.如下是一个典型进程的ID及其类型和功能. 进程名:swapper (交换进程),进程ID:0,类型:系统进程,作用:它是内核的一部分,不执行磁盘上的程序,是调度进程. 进程名:init(init进程),进程ID:1,类型:用户进程 ,作用:永远不会终止,启动系统,读取系统初始化的文件. 进程…
本节主要介绍一个进程控制的实例,功能就是在前台或者后台接收命令并执行命令,还能处理由若干个命令组成的命令行,该程序命名为samllsh. 基本逻辑就是 while(EOF not typed) { 从用户终端取得命令行 执行命令 } setp1:取得命令行内容,用uerin函数实现,处理步骤首先显示提示符,提示符的具体内容由用户通过参数传递给函数,然后每次从键盘读取一个字符,存入inpbuf中,结束时userin返回字符个数或者EOF(文件结尾),换行符也要存入inpbuf 代码如下: #inc…
1.进程和程序 程序是一个可执行文件,而一个进程是一个执行中的程序实例.一个进程对应于一个程序的执行,进程是动态的,程序是静态的,多个进程可以并发执行同一个程序.比如几个用户可以同时运行一个编辑程序,每个用户对此程序的执行均作为一个单独的进程. 2.进程控制的系统调用一个进程可以启动另一个进程,进程之间形成层次结构,而进程树的顶端是一个控制进程,一个名为Init的程序的执行,该进程是所有用户进程的祖先.主要的系统调用有 fork()   通过复制调用进程来建立新的 进程,是最基本的进程建立操作…
主要函数: fork 用于创建一个新进程 exit 用于终止进程 exec 用于执行一个程序 wait 将父进程挂起,等待子进程结束 getpid 获取当前进程的进程ID nice 改变进程的优先级 --------------------------------- 孤儿进程: 如果一个子进程的父进程先于子进程结束,子进程就成为一个孤儿进程,他由init进程收养,成为init进程的子进程. #include <stdio.h> #include <stdlib.h> #includ…
函数fork 博文链接: 1. 代码示例: #include "apue.h" ; char buf[] = "a write to stdout\n"; int main(void) { int var; int pid; ; ) != ) { err_sys("write error!\n"); } printf("before fork!\n"); ) { err_sys("fork error!\n"…
1.pid_t fork(); (1)当一个进程调用了fork 以后,系统会创建一个子进程.这个子进程和父进程不同的地方只有他的进程ID 和父进程ID,其他的都是一样.就象符进程克隆(clone)自己一样. (2)为了区分父进程和子进程,我们必须跟踪fork 的返回值. 当fork 掉用失败的时候(内存不足或者是用户的最大进程数已到)fork 返回-1,否则fork 的返回值有重要的作用.对于父进程fork 返回子进程的ID,而对于fork 子进程返回0.我 们就是根据这个返回值来区分父子进程的…
离职了,交接期也有足够的时间了,可以在好好的再看一下APUE,想想上次详细的看还是在两年之前,虽然中间也偶尔会翻出来看看,但是由于工作上交集相对比较少一直没有去细读一下.现在正好是一段空挡期可以好好看下书了. 第八章之前是一些基础性的东西,如果需要的话可以在后面的文字中稍微提一下,主要还是从进程开始吧.进程的出现是必然的,看下计算机发展的过程可以发现,随着硬件性能的不断提升,我们也在不断改变软件的性能,这样两者的结合才能做到完美.单进程的模式在现在看来是无法想象的,多个软件不能并行的运行,只能一…
一.进程标识 二.函数fork 1.写时复制,copy-on-write 2.文件共享,父进程等待子进程完成,子进程结束后,它对任一共享描述符的读写操作的文件偏移量已做相应的更新,同时操作时,可以考虑使用文件锁 三.函数vfork 1.不完全复制父进程的地址空间 2.保证子进程先运行,直到其调用exec 四.函数exit(进程终止) 1.系统调用的_exit不冲洗标准I/O流,C库中的exit会: 2.父进程比子进程先终止,则子进程的父进程改为init进程,保证每个进程都有一个父进程 3.子进程…