关于循环中fork()行为的问题。当调用fork()时,假设没有调用wait(),父进程应继续执行代码并循环回到顶部,它会提示您输入q以退出。分叉子应该立即打印其ID和中断,因为pid应该等于孩子的ID而不是0.相反,它会进入无限循环。
有人能告诉我我的误解吗?
int main (int argc, char *argv[])
{
char run[2];
int pid=0;
while (run[0]!= 'q')
{
printf("Type q to quit \n");
fgets (run, 2, stdin);
pid=fork();
//wait();
printf("child ID: %i\n", pid);
if(pid!=0) { break;}
}
}
答案 0 :(得分:9)
您将fork()
的返回值混淆了。 孩子获得0
,父母获得孩子的PID。
编者注:由于您没有初始化run
,因此您的程序会在循环的第一次迭代中导致未定义的行为。您也应该检查fgets
的返回值。