对于vfork,在子进程调用exec或exit之前,它在父进程空间中执行!
- #include <stdio.h>
-
#include <sys/types.h>
-
#include <unistd.h>
-
int glob = 6;
-
int main()
-
{
-
int var;
-
pid_t pid;
-
var == 88;
-
printf("before vfork\n");
-
if((pid = vfork()) < 0){
-
perror("vfork error\n");
-
}else if (pid == 0){
-
glob++;
-
var++;
-
exit(0);
-
}
-
sleep(1);
-
printf("pid=%d, glob=%d, var=%d\n", getpid(), glob, var);
-
exit(0);
-
}
此处,由于子进程在父进程空间中运行且先于父进程运行,如果exit会关闭标准I/O流,那么在父进程中,"pid="这样的字眼不会输出,但是,实际的输出却是:
[root@localhost tast]# ./4test
before vfork
pid=29821, glob=7, var=3722433
看起来exit没有关闭标准I/O流!!!
阅读(1455) | 评论(0) | 转发(0) |