まだ生きていて、-9/SIGKILLを殺した後もまだ生きている [重複]

まだ生きていて、-9/SIGKILLを殺した後もまだ生きている [重複]

apache2プロセスが私のサーバーでハングし、他のサービスに問題が発生しています。 (元の質問:USBハードウェアの切断後のKerneloops)

root@server:~# ps aux | grep apache2 | grep -v grep
www-data 12917  0.0  0.1 412148 16156 ?        D    Jun27   0:00 /usr/sbin/apache2 -k start

当然そうkillでした。まだ生きています。だから私はkill -9それをしました。それはまだ「生きている」。

これでserverfault / unix&linuxに適切な質問があります。ポート443を復元する方法はありますか?いいえ明確なことをしてください:再起動しますか? iptablesがインストールされました。

修正する:私はできます。いいえ問題を解決するために再起動する必要はありません。追加の(可能な)ハードウェア障害がない場合は、ここで説明されている一般的なアプローチと「繰り返し」(どのドライブを使用または確認してドライブを取り外しlsofます/proc/$PID/fd)が機能する可能性が高くなります。

答え1

「D」状態は処置不可能です。プロセスはユーザースペースにあるときにのみ終了できます(対応するコードは何でも実行中です)。システムコールが呼び出されると(最も一般的な問題は入出力操作です)、システムコールが返されるまでカーネルが引き継がれます。カーネルモードではプロセスを終了できません。カーネルコードを中断することはシステム全体にとって危険であり、カーネルモードのプロセスが制御なしで信号を受信する必要があるかどうかについての哲学的な質問もあります。

したがって、カーネルモードを終了する唯一の方法は、コード自体がタイムアウト/中断されることです。ネットワークドライブのI / O操作は過度に保護されることが多く、データの損失を避けるためにあきらめたくありません。ネットワークドライブにアクセスできなくなった場合(または他のI / O、デバイスへのアクセス/...失敗)、プロセスは「ディスクゾンビ」状態でほぼ無限に待機する可能性があります。

問題のドライブが強制的にマウント解除されると、通常プロセスは終了します。

関連情報