永发信息网

Linux关于fork的问题

答案:1  悬赏:50  手机版
解决时间 2021-07-20 11:22

有一段代码如下,老师给的

int main(void){

pid_t pid;

printf("Original program, pid=%d\n",getpid());

pid=fork();

if(pid==0){

printf("In child process,pid=%d,ppid=%d\n",getpid(),getppid());

}

else{

printf("In parent, pid=%d,pid value now=%d\n",getpid(),pid);

}

}

运行结果是:

Original program, pid=987
In child process, pid=988, ppid=987
In parent, pid=987, pid value now=988

我的问题是:

为什么if执行完了又执行了else了呢?

是因为他们一个是在子进程环境中,一个是在父进程中么?

如果是,什么时候程序是在子进程的环境中的,什么时候是在父进程的环境中的?

作为初学者,可能连问题的关键都没有抓住,希望大侠能通俗解释一番~

小人不胜感激~~

最佳答案
从pid=fork()的那一刻起
父进程就被copy了一摸一样的拷贝,包括下一条要执行的指令

fork以后fork给父进程返回子进程的pid,给子进程返回0
所以对于父进程,执行的是else,对于新创建的子进程,执行的是if(pid==0)中的内容
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
三星500G硬盘要多钱
现在广西一区的含光多少钱一把+7的
女人能喝酒搞笑句子,对对错错喝酒爱情这歌叫
我的DNF进入游戏没有角色去官网恢复角色未处
现在你可以跟你未婚妻打一个一个小时的电话?
电视购物的背背佳跟专柜上的背背佳为什么价格
怎样解决两台电脑共享一根网线而卜会卡?
摩尔庄园云朵怎么得到?
家园级别和社区级别以及G币的问题
怎么解决唱歌五音不全
对他太好、会惯坏么?
乌鸡有几个脚趾头,乌骨鸡有5个脚指头?
生日到了,男朋友不许我带别的男性朋友去,怎
写现代史诗词的软件,电子诗歌iphone越狱版和
QQ空间签名档插入图片提示内容过大
推荐资讯
求OrangeRange(橘子新乐团)歌曲《キズナ》(
打魔兽 神界危机全新版 有什么技巧??
冬天萝卜怎样做好吃
蔡文姬语录王者荣耀,王者荣耀庄周怎么玩 庄周
诺基亚6300能不能下载火星文输入法?
宣传一个地方的策划书
DNF没开挂为什么会显示非法模块
耐克运动鞋ZOOM
关于法律的一个问题,大家帮一下
我怕死咋办啊?
星梦宝瓶的任务哪儿去了?
brother-2480C传真机说明书
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?