1

关于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;}
    }
    
}
4

1 回答 1

9

你有fork()混合的返回值。孩子得到,0父母得到孩子的PID。

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

于 2013-10-16T18:07:49.900 回答