iノード番号のみでパイプをkill / rmする方法は?


0

編集:私はもともと閉じた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)を試しましたが、役に立ちませんでした。



プロセスが生きていることをどの程度確信していますか?kill -9でプロセスが終了しない場合は、ゾンビである可能性があります。
TOOGAM

みんなのコメントと回答に感謝し、質問を編集してより多くの情報を追加しました。
バリーカーター

回答:


0

kill -9動作しない場合、プロセスは永続的に妨害されている可能性があります。何かがタイムアウトするかどうかを待って確認することができ、カーネルモジュールをアンロードするかデバイスを取り外すことで何かのスティックを解除できる場合がありますが、おそらく次の再起動まで無視する必要があります。

幸いなことに、この状態のプロセスはほぼ確実にCPUリソースを使用せず、遅かれ早かれメモリがスワップに移動する可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.