0

Tannenbaum の MINIX に関する本の中で、私は単純化されたシェル プログラムに出くわしました。

while(1) {
 read_command(command, parameters);
 if (fork() != 0) 
      wait(&status);    /* parent code */
 }
 else {
      execve(command, parameters, 0);  /* child code */
 }
}

無限ループが最初の反復を実行すると、fork() は子プロセスを作成したことを示す 0 を返します。2 回目の実行では、fork() は新しい子プロセスを作成しませんか? wait(&status) はどのように実行されますか?

OS がどのように機能するか、またはどのように構築されるかを理解するのは初めてです。

ありがとう!

4

1 に答える 1

1

fork新しいプロセスをすぐに作成するため、両方のプロセスが戻り値を確認forkしますが、戻り値は異なります。親では、戻り値は子のゼロ以外のプロセス ID であるため、親は を実行しwaitます。子では、 fork0 が返されるため、子は を実行しexecveます。

于 2014-03-26T12:09:31.463 に答える