- 论坛徽章:
- 0
|
fork():
int glob = 6;
char buf[] = "a write to stdout\n";
int main()
{
int var;
pid_t pid;
var = 88;
if( write(STDOUT_FILENO, buf, sizeof(buf))-1 != sizeof(buf)-1)
err_sys("write error");
printf("before fork\n");
if( (pid = fork()) < 0 ) {
err_sys("fork error");
} else if(pid == 0) {
glob++;
var++;
} else {
sleep(2);
}
printf("pid = %d, glob = %d, var = %d\n", getpid(), glob, var);
exit(0);
}
输出如下:
[root@www apue2]# ./a.out
a write to stdout
before fork
pid = 26062, glob = 7, var = 89
pid = 26060, glob = 6, var = 88
vfork():
int glob = 6;
int main()
{
int var;
pid_t pid;
var = 88;
printf("before fork\n");
if( (pid = vfork()) < 0 ) {
err_sys("fork error");
} else if(pid == 0) {
glob++;
var++;
_exit(0); //不是exit(0)
}
printf("pid = %d, glob = %d, var = %d\n", getpid(), glob, var);
exit(0);
}
输出如下:
[root@www apue2]# ./a.out
before fork
pid = 27042, glob = 7, var = 89
我的疑问是: vfork()的输出应该是:
before fork
pid = 27043, glob = 7, var = 89 //vfork()保证子进程先运行
pid = 27042, glob = 7, var = 89 //在子进程调用exec或exit之前,它在父进程的地址空间运行
但,为什么vfork()输出却只有一行,而不是像fork()那样是两行?
[ 本帖最后由 李某人 于 2009-4-19 15:17 编辑 ] |
|