分类: LINUX
2011-04-12 19:11:40
008_进程控制-02
1)Vfork函数
Vfork用于创建一个新进程,而该新进程的目的是exec一个新程序。
Vfork并不将父进程的地址创建完全复制到子进程中,因为子进程会立即调用exec,于是也就不会存访该地址空间。不过在子进程调用exec OR exit()之前,它在父进程的空间中运行。
Vfork和fork之间的另一个区别是:vfork保证子进程先运行,在它调用exec OR exit之后父进程才可能被调度运行。
OUTPUT:
cjok@ubuntu:~/c/process$ ./vfork
I am child process, PID = 8761, num = 7
I am parent process, PID = 8760, num = 7
2)exit()函数
a)对于其父进程已经终止的所有进程,它们的父进程都改为init进程。
b)一个已经终止、但是其父进程尚未对其进行善后处理(获取终止进程的有关信息、释放它仍占用的资源)的进程被称为僵尸进程(zombie)。
3) Wait和waitpid函数
a)调用wait和waitpid的进程可能会出现
i.阻塞(如果其所有的子进程都在运行);
ii.带子进程的终止状态立即返回(如果一个子进程已终止,正等待父进程存取其终止状态);
iii.出错立即返回(如果它没有任何子进程)。
b)区别
a)在一个子进程终止前,wait使其调用者阻塞,而waitpid有一选择项,可使调用者不阻塞。
b)Waitpid并不是等待第一个终止,它用若干个选择项,可以控制它所等待的进程。
水平有限,如果有错误的地方,请指正,thanks
cjok.liao@gmail.com