3

Linux 2.6 では、正常に終了するために、プロセスが SIGHUP と SIGTERM の両方をキャッチするようにしたいと考えています。

ノードがシャットダウンすると、ログは、ノードが SIGHUP (親プロセスが SIGTERM を受け取る) または SIGTERM を最初に処理することを示します。

私の質問は、これらのシグナルのハンドラーが同時に呼び出される可能性はありますか? またはカーネルが次々とトリガーしますか?

4

2 に答える 2

0

コード アーキテクチャによっては、シグナルの同期読み取りを強制して、同時実行の問題を防ぐことができます。未処理のシグナルを確認したいときはいつでも、signalfd を使用してその fd から読み取ることができます。シグナルハンドラーを使用して非同期のデフォルトで動作させる必要がある場合は、シグナルハンドラーが中断される可能性があることに備える必要があると思います。

男シグナルfd

于 2012-12-04T15:01:40.230 に答える
0

プロセスへの非同期シグナルでは、Linux カーネルがターゲット プロセス構造へのシステム コールでシグナルを送信し、プロセスのコンテキストが RUN 状態に切り替わると、シグナルはルート スレッドによって処理され、他のすべてのスレッドではシグナルがブロックされます。スタック空間はスレッドごとに異なるため、各シグナルを一度に処理できます (間違っていれば正しい)。

于 2012-12-04T15:27:22.250 に答える