fork()系统调用和while循环

时间:2013-10-16 18:03:15

标签: c linux fork system-calls

关于循环中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;}
    }

}

1 个答案:

答案 0 :(得分:9)

您将fork()的返回值混淆了。 孩子获得0,父母获得孩子的PID。

编者注:由于您没有初始化run,因此您的程序会在循环的第一次迭代中导致未定义的行为。您也应该检查fgets的返回值。