Fork()命令问题

时间:2012-07-08 18:45:41

标签: c linux fork

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

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

伪码

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

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

中不太好

2 个答案:

答案 0 :(得分:2)

从什么时候处理ID“从0开始”?系统启动时甚至都没有;第一个进程的id为1: - )

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

答案 1 :(得分:1)

printf

之后添加此内容
fflush(stdout);

但是你的逻辑存在根本问题。 fork()在子节点中返回0,子节点在父节点中返回。你没有检查,所以父母和孩子都继续做循环,这种情况再次发生,并且又一次又一次地发生。您需要将循环体更改为:

if(fork() == 0)
{
  printf("Hello!\n");
  fflush(stdout);
}