并行创建子进程

时间:2012-10-03 15:31:01

标签: parallel-processing fork parent-child

说我有这段代码

for (int n = 0; n < 4; ++n)
{
   if (fork())
   {
      // do something
      // if some condition is met
      // kill the parent
      // else, just return 
   }
   else
      printf("cannot get a process\n");
}

我是否会创建4个并行运行的子进程?或者我会创建其中4个一个接一个地运行(因为父进程中的循环将不会前进,直到子进程返回)?

谢谢

P.S:我确实意识到这可能是一种不好的做法(即,从孩子身上杀死父母导致僵尸四处走动,但现在让我们忽略它!)。

1 个答案:

答案 0 :(得分:2)

将代码重写为:

for( int n = 0; n < 4; ++n ) {
    switch( fork()) { 
        case 0: /* child */
            /* Do stuff */
            exit( 0 );
        case -1:
            perror( "fork" );
            exit( 1 );
        default:  /* parent */
            /* do stuff, but don't wait() or terminate */
    } 
}

孩子们确实会并行行动。尽管一个孩子完全可能会在下一次跑步之前快速跑步并终止,但在这种情况下,孩子们有效地连续跑步。如果父母等待孩子,他们将连续运行。另请注意,如果父级不在此处wait(),并且在循环之外没有wait,则子项将在终止时变为僵尸。一旦父节点终止,僵尸子节点将由init继承,它将等待它们并从进程表中删除它们(因此它们将不再是僵尸。)