【发布时间】:2016-02-26 19:55:37
【问题描述】:
我无法弄清楚它是如何工作的。fork 系统调用将父进程拆分为两个进程,它为子进程返回零。根据我的说法,子进程的输出应该是 glb=101.var=89。但是我错了。有人可以解释一下它是如何工作的吗?
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int glb=100;
int main()
{
int pid;
int var =88;
printf ("Before Fork\n");
pid=fork();
if(pid <0)
{
perror("fork");
exit(1);
}
if(pid ==0) /**child**/
{
glb++;var++;
}
else
{
sleep(5);
}
printf("pid= %d,glb=%d,var=%d\n",getpid(),glb,var);
return 0;
}
【问题讨论】:
-
对我来说很好:
Before Forkpid= 31955,glb=101,var=89pid= 31954,glb=100,var=88你得到什么输出表明它没有? -
你错了孩子不输出“glb=101,var=89”?它确实输出。
-
是的,现在可以了,我关闭了终端并再次运行它,现在它工作正常了。不过我有一个问题,它们的 pid 是按递增顺序排列还是也可以变化。谢谢。
-
pids 在 windows 和 linux 上隐约增加,但它们被重用,因此不能真正保证重用。
标签: c fork system-calls