0

说我有这段代码

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 个一个接一个地运行(因为父进程中的循环在子进程返回之前不会前进)?

谢谢

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

4

1 回答 1

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 继承,init 将等待它们并将它们从进程表中删除(因此它们将不再是僵尸。)

于 2012-10-03T16:29:10.267 回答