РЕДАКТИРОВАТЬ: Первоначально я вырезал и вставил вопрос, который я задал ранее, о 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 $_");'
но результатов было много, и я не уверен, сколько из них было на самом деле важно. Если есть какие-либо конкретные файлы, которые было бы полезно опубликовать, пожалуйста, дайте мне знать, и я буду.
Почему это важно: мой процессор, кажется, работает намного медленнее, так как этот процесс начал зависать (прошло уже несколько дней). В прошлый раз, когда это произошло, я перезагрузился, и все было хорошо, но я надеюсь избежать перезагрузки на этот раз.
Оригинальный вопрос ниже:
У меня есть несколько процессов (некоторые переданы друг другу), которые даже не убивают -9, не убивают. Когда я запускаю lsof -p на одной из них, я вижу несколько строк, одна из которых гласит:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
convert 9859 barrycar 0r FIFO 0,6 0t0 74488298 pipe
Я почти уверен, что это проблема: процессы открыли каналы для связи друг с другом на устройстве, которое вышло из строя (который я позже перемонтировал только для чтения с другим файлом / dev / device).
Я думаю, что если я смогу уничтожить канал с помощью инода 74488298, два процесса, связанных этим каналом (у которого, конечно, есть другой номер инода для второго процесса), умрут.
Итак, как я могу это сделать и / или какой сигнал уничтожения я могу послать процессам, которые говорят: «Ваши каналы сломаны, сдавайтесь и умираете»? Я пытался POLL, TRAP, HUP, (и, конечно, убить -KILL ака kill -9) безрезультатно.