6

Linux プロセスが I/O を待機している場合 (つまり、SLEEP状態にある場合)、SIGKILLそれに対してシグナルが発行された場合、終了時 (STOPPED状態) にそれは通過しますか、RUNNINGそれともREADY状態になりますか?

言い換えれば、プロセスが生成されたようなシステム割り込みを処理するにSIGKILLは、パススルーRUNNINGまたはREADY状態が必要ですか?

通常の状況では、プロセスはカーネルからの割り込みを処理できることを知ってSIGKILLいて、応答しないシグナルを殺すという非常に矛盾した目的があることを知っていたので、もし殺されているプロセスにどれだけの制御が与えられているかについて、私は疑問を持っていました。

4

2 に答える 2

8

シグナルはカーネルによってプロセスに「ハンドオフ」されるため、プロセス A からプロセス B にシグナルを送信すると、カーネルが使用されます。SIGKILL が配信されると、カーネルはプロセス (ユーザー モード) によるアクティビティを一切許可しません。具体的には、プロセス ランダウン: atexit 呼び出し、_exit です。何もない。プロセスはシステムによって単に破棄されます。これには、カーネル モードでのアクティビティが含まれます。バッファリングされたデータは失われます。SYSV セマフォおよびその他のカーネル永続メモリ オブジェクトはメモリに残されます。それは本当の混乱になる可能性があります。

カーネル メモリ内の何かが原因でハングしている場合は、Linux で sysrq インターフェイスを使用します。

http://tldp.org/HOWTO/Remote-Serial-Console-HOWTO/security-sysrq.html

-- 注文されたシャットダウンに似たものを実行するため。

これが、何を壊しているのかを知ることができないため、SIGKILL の使用が絶対的な最後の手段である理由です。また、すべてのハングが修正されるわけではありません。

正確には何に取り組んでいますか?

于 2013-04-02T14:32:30.020 に答える
1

ジム・マクナマラの答えに加えて:

SIGKILL (kill -9) は扱えません。

詳細については、 https://stackoverflow.com/a/2541618/1456519の回答を参照してください。

于 2013-04-02T15:01:06.337 に答える