vfork与fork一样创建一个子进程,但是它不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec,于是就不会存访地址空间。
另一个区别是:vfork保证子进程先运行,在它调用exec或exit之后父进程才可能执行。父进程处于休眠状态。
_Exit和_exit不执行标准I/O缓冲的冲洗。exit冲洗所有标准I/O流。
标准输出连接到终端设备,则它是行缓冲的,由换行符冲洗
标准输出重定向到一个文件时,则它是全缓冲的。由exit函数冲洗。
不管进程如何终止(正常或不正常),最后都会执行内核中同一段代码,这段代码为相应进程关闭所有打开的文件描述符,释放它所使用的存储器。
对于父进程终止的所有进程,他们的父进程都改变为init进程。init进程ID为1。
僵死进程:一个已终止,但是其父进程尚未对其进行妥善处理的进程。
init进程中只要有一个子进程终止,就会调用wait函数取得终止状态,所以init进程没有僵死进程。
等待特定进程的函数waitpid();
waitpid提供了wait没有的三个功能:
1、waitpid可等待特定进程
2、waitpid提供一个wait非阻塞版本
3、waitpid支持作业控制(WUNTRACED WCONTINUED)
避免进程竞争条件和轮询:1、信号 2、IPC 3、管道