请教:
这个程序是不是这样运行的:
1:pid=vfork() 产生子进程
2:printf("Child process is printing.\n");
3:exit(0); 子进程结束
4:唤醒父进程
5:printf("arent process is printing.\n");
6:exit(0); 父进程结束
7:退出程序
以下摘自unix环境高级编程:
1、v f o r k与f o r k一样都创建一个子进程,但是它并不将父进程的地址空间完全复制到子进程中。不过在子进程调用e x e c或e x i t之前,它在父进程的空间中运行。
v f o r k和f o r k之间的另一个区别是: v f o r k保证子进程先运行,在它调用e x e c或e x i t之后父进程才可能被调度运行。(如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。)
2、进程有三种正常终止法。
(a) 在m a i n函数内执行r e t u r n语句。如在7 . 3节中所述,这等效于调用e x i t。
(b) 调用e x i t函数。此函数由ANSI C定义,其操作包括调用各终止处理程序(终止处理程序
在调用a t e x i t函数时登录),然后关闭所有标准I / O流等。因为ANSI C并不处理文件描述符、多进程(父、子进程)以及作业控制,所以这一定义对U N I X系统而言是不完整的。
(c) 调用_ e x i t系统调用函数。此函数由e x i t调用,它处理U N I X特定的细节。_ e x i t是由P O S I X . 1说明的。