1

在彻底执行 fork() 命令时,我遇到了一个问题。

如果时间从第 0 秒开始,到第 12 秒结束时创建了多少个进程?进程 ID 从 0 开始。

伪代码

 while(true)
        {
             sleep 1second;
             if( getpid() % 2 == 0 )
             {
                     fork();
                     printf("Hello\n");
             }
       }

当我在我的系统上运行上面的代码时,它没有在 konsole 上显示输出。没有 。12 秒结束时的进程取决于操作系统?需要建议,因为我不擅长 fork()

4

2 回答 2

2

从什么时候开始进程 ID“从 0 开始”?即使在系统启动时也不行;第一个进程的 id 为 1 :-)

只有当您自己的进程 ID 是偶数时,您才会进行 fork();所以如果它碰巧很奇怪,那么什么都不会发生......这意味着如果你多次运行程序,有时它会做一些事情,有时它不会。

于 2012-07-08T18:50:31.833 回答
1

在你的后面添加这个printf

fflush(stdout);

但是您的逻辑存在根本问题。fork()在子进程中返回 0,在父进程中返回子进程 pid。你不检查,所以父母和孩子都继续循环,一次又一次,一次又一次,永远。您需要将循环体更改为:

if(fork() == 0)
{
  printf("Hello!\n");
  fflush(stdout);
}
于 2012-07-08T18:48:59.910 回答