シェルからフォアグラウンド プロセスを開始し、ctrl-c を使用して SIGINT を配信し、それが処理されずに終了した場合、シェルはプロセスが SIGINT によって強制終了されたかどうかをどのように認識しますか。私の仮定は、exit を呼び出してもプロセスがゾンビに移行しないということです。
ありがとう
シェルはwait(2)
ファミリーの関数を使用して、子が kill /terminate されるのを待ち、子を殺したシグナルがあればそれを取得します。
シグナルを処理しないアプリケーションは、実際にはデフォルト ハンドラーを実行します (これにより、 の場合はアプリが強制終了されますSIGINT
)。アプリケーションへのシグナルの配信とハンドラーの呼び出し (デフォルトまたはアプリケーションによって設定されたもの) はオペレーティング システムによって処理されるため、OS がどのシグナルがアプリケーションを強制終了したかを認識し、それに応じて終了コードを設定する場所があります。シェルは終了コードを表示するだけですが、それを設定するのは OS です。