多进程 vfork

#include <stdio.h>
#include <unistd.h>


     
int main()
{
int test = 0;
int pid = 0;
if(( pid = vfork()) > 0)
{
printf("%d\n",test);
}
else if(pid == 0)
{
test += 10;
}
     return 0;

}


若fork结果

[wuliande@bogon 1]$ mytest
0
[wuliande@bogon 1]$


若vfork结果

10560347
10560347
10560347

...............

10560347
10560347

这两个结果反映出  vfork本来就是为了exec(或exit退出)来设计的  如果之后不紧接着调用exec   而做一些别的操作  结果可能是未知的

(不过这次出错  怀疑应该是 return 的错误)

根据apue  vfork之后子进程应该运行在父进程空间  所以return出错  因为不可能子进程就这样终止了父进程


#include <stdio.h>
#include <unistd.h>


     
int main()
{
int test = 0;
int pid = 0;
if(( pid = vfork()) > 0)
{
printf("%d\n",test);
}
else if(pid == 0)
{
test += 10;
exit(0);    //改用这个退出
}
     return 0;
}

结果


[wuliande@bogon 1]$ mytest  
10
[wuliande@bogon 1]$ 

子进程改变了父进程变量的值那么证明了  vfork之后子进程应该运行在父进程空间(但具体运行方式  表示不知)


vfork保证了 子进程先运行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值