wget
終了できないプロセスがあります。この質問は次のようになります。私は以前何か尋ねました。しかし、ここの列のD
項目STAT
はuninterruptible sleep (usually IO)
、他の質問では、プロセスは状態にありますR
。
$ ps -axuf | grep `id -un`
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
[...]
biogeek 2833351 0.0 0.0 0 0 ? D Apr12 0:03 [wget]
[...]
殺そうとすると、出力は生成されません。
$ kill -9 2833351
ps -axuf
再実行しても wget
プロセスはそのまま残ります。
この問題を引き起こすソフトウェア/ハードウェア障害をどのように識別できますか?
答え1
プロセスが SIGKILL を受け取ったので、現在のシステムコールから返されると終了します。また、カーネルは、プロセスがシステムコールを中断しても安全な状態に入るとすぐにプロセスが復帰できるようにします。カーネル内で異常が発生した場合、プロセスはD
長時間中断することなくスリープ状態になります。終了できないプロセスの詳細については、次を参照してください。「kill -9」が動作しない場合はどうなりますか?
プロセスが実行しているタスクを調査する1つの方法は、次の診断ツールを実行することです。ストレスまたは道または他の同様のツール(Unixの好みに応じて)。これにより、プロセスがどのシステムコールを実行しており、どのパラメータを使用しているかがわかります。たとえば、次の内容が表示されることがあります。
strace -p2833351
strace: Process 2833351 attached
read(3,
これは、プロセスが現在のファイル記述子3から読み取られていることを知らせる。次のステップは、withlsof -p2833351
やwithなどのファイル記述子に何があるかを調べることですls -l /proc/2833351/fd/3
。これは、応答しないNFSサーバーや障害のあるディスクコントローラがファイルシステムドライバが予期しない状態になるなど、問題の原因を示している可能性があります。
システムログでも手がかりを見つけることができます。手がかりは、非常に異なる原因によって引き起こされる可能性があり、非常に異なる兆候を持つ可能性がある異常な行動であるため、見つけるのは難しいかもしれません。プロセスが実行する操作に直接関連するカーネルのバグ、一部のメモリを破損する関連のないカーネルのバグ、一部のメモリを破損するRAMの不具合、応答があってはいけませんが応答しないディスクドライブなどの障害のある周辺機器です。など。
答え2
特定の状態でD
唯一のオプションは、ブロックディスクI / O操作がwget
完了するのを待つ(成功または失敗)、再起動するか、中断されたプロセスを無視することです。プロセスツリーを表示し、wget
プロセスの親または子プロセス(存在する場合)を見つけたり、プロセスのデータを表示したり、開いている/proc/PID/fd
ファイルハンドルを確認したり、そのファイルハンドルを開いたままにできるすべてのプロセスを見つけることができます。
答え3
試してみてください:sudo kill {pid_process}