Afork()
は基本的に新しいプロセスを作成します。これは、現在のすべての値がコピーされることを意味します。val
これはまた、親プロセスでは子プロセスではないと結論付けていval
ます。これが、何らかの方法で子プロセスと通信する必要がある理由です。これは、 を使用して行いますwait
。
親プロセス | 子プロセス
-------------------------------|---------------------- -----
メイン() |
{ | ########################
int 値 = 5; | | // int val = 親.val;
** int tmp = fork(); | | ** int tmp = 0;
if(tmp) // 真 | if(tmp) // false
待ちます(&val); | | // 待機を使用しない
// まで待機 | 値++; // 値 = 6
// 子プロセス | printf("%d\n", val);
// 戻り値。| | 戻り値; // 6 を返す
// リターンを保存 | ##########|############
// val の値 <---------------+
値++; // 値 = 7 | ##########################
printf("%d\n", val); | | ########################
戻り値; | | ########################
}
Linux でプロセスが終了するたびに、戻り値が一時的に保存されます。親プロセスがこの保存された値を取得しない限り、子プロセスは依然としてゾンビとしてリストされます。この値は で取得できますwait
。したがって、呼び出し元でreturn <value>
アプリケーションの最後に使用すると、この戻り値が返されます。wait()