РЕДАКТИРОВАТЬ: Первоначально я вырезал и вставил вопрос, который я задал ранее, о 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) безрезультатно.

1 ответ1

0

Если kill -9 не работает, то процесс может быть заблокирован. Вы можете подождать и посмотреть, истечет ли время ожидания, и вы можете отсоединить что-то, выгружая модули ядра или отключая устройства, но, вероятно, вам просто придется игнорировать их до следующей перезагрузки.

Хорошая новость заключается в том, что процесс в этом состоянии почти наверняка не использует ресурсы процессора, и рано или поздно его память может быть перемещена для подкачки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .