4

私はCでこの小さなプログラムを持っていて、それがどのように機能するかを理解しようとしています。これは、コマンドラインで数行を使用fork()wait()て出力する単純なwhileループです。私が思うことをできる限りコメントしましたハプニング

for (i = 1; i <= 3; i++)            /*simple while loop, loops 3 times */
{
    pid = fork();                   /*returns 0 if a child process is created */
    if(pid == 0){                   /*pid should be a 0 for first loop */
        printf("Hello!\n");         /*we print hello */
        return (i);                 /*will this return i to the parent process that called fork? */ 
    }   else {                      /*fork hasn't returned 0? */
        pid = wait(&j);             /*we wait until j is available? */
        printf("Received %d\n", WEXITSTATUS(j));   /*if available we print "received (j)" */
    }
}

このプログラムは、次のように出力することになっています。

Hello!
Received 1
Hello!
Received 2
Hello!
Received 3

子プロセスの1つが戻るiと、親プロセスはそれを待ち&jますか? これは本当に私を混乱させます。どんな助けでも大歓迎です。

4

1 に答える 1

6

ループの反復ごとにfork()、子プロセスが作成されます。子プロセスが出力してシス​​テムHello!に戻りますi。親プロセスはwait()、子が実行を終了するまでブロックします。 j子プロセスがシステムに返した値が含まれます。

于 2015-08-15T11:12:08.787 に答える