vfork 为何挂掉

 

在知乎上,有个人问了这样的一个问题——为什么vfork的子进程里用return,整个程序会挂掉,而且exit()不会?并给出了如下的代码,下面的代码一运行就挂掉了,但如果把子进程的return改成exit(0)就没事。

我受邀后本来不想回答这个问题的,因为这个问题明显就是RTFM的事,后来,发现这个问题放在那里好长时间,而挂在下面的几个答案又跑偏得比较严重,我觉得可能有些朋友看到那样的答案会被误导,所以就上去回答了一下这个问题。

下面我把问题和我的回答发布在这里,也供更多的人查看。

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

int main(void) {

int var;

var = 88;

if ((pid = vfork()) < 0) {

printf("vfork error");

exit(-1);

} else if (pid == 0) { /* 子进程 */

var++;

return 0;

}

printf("pid=%d, glob=%d, var=%d\n", getpid(), glob, var);

return 0;

}



参见:

http://www.guokr.com/blog/806477/

http://www.guokr.com/blog/806478/

http://www.doc88.com/p-1408571371043.html

 

posted on 2015-03-04 22:51  python100  阅读(175)  评论(0编辑  收藏  举报

导航