編集:私はもともと閉じたstackoverflowで以前に尋ねた質問を切り取って貼り付けました:https: //stackoverflow.com/questions/32622224/how-to-kill-pipe-by-inode-number-only
現在、別のプロセスで同じ問題に遭遇し、そのプロセスの質問を編集しました(新しいpidは23758です)。
プロセスはディスク待機にあるようです:
> ps -wwwlp 23758
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 D 500 23758 1 0 80 0 - 3651 lookup ? 00:00:00 bc-xwd.pl
「lsof -p 23758」は多くの行を返しますが、「興味深い」行は次のように表示されます。
bc-xwd.pl 23758 barrycar 0r FIFO 0,6 0t0 82208417 pipe
bc-xwd.pl 23758 barrycar 1w CHR 1,3 0t0 620 /dev/null
bc-xwd.pl 23758 barrycar 2w CHR 1,3 0t0 620 /dev/null
「lsof -p」では表示されませんが、bc-xwd.plは/ mnt / sshfsにアクセスします。これは、頻繁にクラッシュする傾向があるHFS読み取り専用ループマウントファイルシステムです。クラッシュすると、次のようなコンソールメッセージがいくつか表示されます。
Message from syslogd@domain at Oct 24 05:54:32 ...
kernel: [<c0408474>] ? sysenter_do_call+0x12/0x28
Message from syslogd@domain at Oct 24 05:54:32 ...
kernel:Code: 8b 44 10 2c e8 84 10 de ff 8b 83 a0 00 00 00 0f b7 50 04 39 d6 7c e5 8b 93 a0 00 00 00 8b 42 18 85 c0 74 16 c7 42 18 00 00 00 00 <8b> 30 e8 bf fc ff ff 85 f6 74 04 89 f0 eb f1 8b 83 a4 00 00 00
Message from syslogd@domain at Oct 24 05:54:32 ...
kernel:EIP: [<c06af6b0>] skb_release_data+0x78/0x96 SS:ESP 0068:df021da8
(さらにいくつか)。
通常、それにアクセスするプロセスは単純に停止しますが、上記のようにハングするものもあります。ファイルシステムを再マウントしても役に立ちません。
私はこれを(bashで)実行して、可能なすべてのキル信号でヒットさせました。
perl -le 'for (@ARGV) {print "kill -$_ 23758"}' `kill -l` | sh
しかし、それはまだ生きています。同じことをtcshで行い(「| sh」を「| tcsh」に置き換えます)、同じ結果が得られませんでした。
また、次のようにして/ proc / 23758のすべてのファイルを調べました。
find /proc/23758 -type f | perl -nle 'print "$_:";system("cat $_");'
しかし、多くの結果があり、実際にどれだけ重要だったかはわかりません。特定のファイルがある場合は投稿するのが便利ですので、お知らせください。
なぜこれが重要なのか:このプロセスがハングし始めてから、CPUの速度が大幅に低下しているように見えます(数日経ちました)。前回これが起こったとき、私はリブートしましたが、すべては順調でしたが、今回はリブートを避けたいと思っています。
以下の元の質問:
-9を殺しても殺さないプロセスがいくつかあります(いくつかは互いにパイプ接続されています)。それらの1つでlsof -pを実行すると、いくつかの行が表示されます。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
convert 9859 barrycar 0r FIFO 0,6 0t0 74488298 pipe
これは問題だと確信しています。クラッシュしたデバイス上でプロセスがパイプを開いて相互に通信しました(後で別の/ dev /デバイスファイルで読み取り専用に再マウントしました)。
iノード74488298でパイプを破棄できる場合、このパイプでリンクされている2つのプロセス(もちろん、2番目のプロセスの別のiノード番号があります)は死ぬと思います。
だから、これをどのように行うことができますか、および/または「あなたのパイプが壊れてあきらめて死ぬ」と言うプロセスにどのようなキルシグナルを送ることができますか?POLL、TRAP、HUP(およびもちろんkill -KILL別名kill -9)を試しましたが、役に立ちませんでした。