ベストアンサー1
システムコールは常にプロセスによってカーネルに行われます。
したがって、具体的な質問に答えてください。
- 親プロセスは
wait
カーネルを呼び出します。 - 子プロセスは
exit
カーネルを呼び出します。
以下は、何が起こるのかを簡略化したものです。
プロセスが呼び出されると、exit
カーネルはreturn code
内部プロセステーブルに引数()を格納し、プロセスに関連する他のすべてのリソース(割り当てられたメモリ、開かれたファイル記述子)を破壊し、プロセスをマークしますzombie
。
親プロセスがカーネルを呼び出すと、カーネルはその状態wait
にある子プロセスがあることを確認します。zombie
そのreturn code
場合は、内部プロセステーブルから保存された内容を取得し、テーブルのスロットを解放してからシステムコールwait
から返し、return code
子プロセスが状態にない場合、zombie
カーネルは子プロセスが表示されるまで親プロセスをブロックします。電話exit
。
任意のプロセスによって呼び出されると、exit
残りのすべての子プロセスはreparented
PID 1のプロセスを指すため、最初のプロセスを除くすべてのプロセスには常に親プロセスがあります。
PID 1は、実行中のすべて(ネットワークサービス、シリアル回線の受信機、GUIログインプログラム)を起動し、カーネルwait
プロセステーブルがゾンビでいっぱいにならないように、呼び出しの無限ループに入ります。
一つあるたくさん私は仕事を少し簡素化し、プロセス番号1以外でプロセスをリセットするようにカーネルに要求することができます。代理死神、呼び出しにはさまざまな形式がありますwait
(wait、waitid、waitpid、wait3、wait4(マニュアルページ)、相互作用する道システムコール、割り当てられたリソースを破壊することはどういう意味ですか?