fork()系统调用和while循环

Mik*_*ike 1 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;}
    }

}
Run Code Online (Sandbox Code Playgroud)

Car*_*rum 9

你有fork()混合的返回值.在孩子变得0和家长获取孩子的PID.

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