我正在研究系统编程系统调用。我的作业中有一个代码块(如下所示)。问题是我要打印多少A,B或C.我的问题是if(pid == 0)
的含义是什么?我猜if(pid == 0)
表示错误,因此我分析将打印2 x A和2 x B.我写的还是?第二个问题是pid2 = fork()
再次执行main吗?
int main()
{
int pid,pid2;
int i;
pid = fork();
printf("A\n");
if (pid == 0)
pid2=fork();
if (pid2)
printf("B\n");
printf("C\n");
return 0;
}
答案 0 :(得分:6)
fork
系统调用很特别。你打电话一次,然后再打两次。一旦进入孩子,一次进入父母。
在父级中,它返回子级的pid,在子级中返回0.因此,if (pid == 0)
表示“如果这是孩子”。
答案 1 :(得分:3)
fork
将0
返回到子进程,将子进程的pid返回给父进程。手册页应该清除其他所有内容。
答案 2 :(得分:2)
Fork返回2个值:
在您的示例中,您创建了3个进程,并将输出2A,1B和3C
答案 3 :(得分:1)
pid2
。将打印多少B
是未定义的行为。
pid=fork()
无法再次执行main()
,希望......
答案 4 :(得分:0)
他返回Fork调用的值会返回一个不同的值,具体取决于你当前的进程。
假设您希望在父进程中执行一些代码,您将在此条件块中填充该部分代码:
p = fork();
if (p > 0)
{
// We're the parent process
}
如果你想在子进程中执行一些代码,那么同样适用:
p = fork();
if (0 == p)
{
// We're the child process
}
其余的(由父母进程和孩子执行)在一个else块中。