Вбийте процес, який продовжує перезапуск


16

Що робити, якщо "убити -9" не працює? або Як вбити сценарій, який запускає нові процеси? мені ні в якому разі не допомагає.

У мене є скрипт python, який автоматично починається з іншого ідентифікатора процесу, використовуючи той самий порт, коли вбивається за допомогою sudo kill -9 <pid>.

$ lsof -i :3002
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  13242 ubuntu    3u  IPv4  64592      0t0  TCP localhost:3002 (LISTEN)
$ sudo kill -9 13242
$ lsof -i :3002
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  16106 ubuntu    3u  IPv4  74792      0t0  TCP localhost:3002 (LISTEN)
$ sudo kill 16106
$ lsof -i :3002
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  16294 ubuntu    3u  IPv4  75677      0t0  TCP localhost:3002 (LISTEN)

Це не процес зомбі.

$ ps -Al

4 S     0 16289     1  0  80   0 - 12901 poll_s ?        00:00:00 sudo
4 S  1000 16293 16289  0  80   0 -  1100 wait   ?        00:00:00 sh
0 S  1000 16294 16293  0  80   0 - 34632 poll_s ?        00:00:00 python

Я навіть намагався sudo pkill -f <processname>не пощастило. Він не хоче вмирати.

Оновлення:

Це батьківський процес sh, батько якого є sudoтаким, як зазначено у вищевказаній таблиці. Я не впевнений, чи безпечно їх різко вбити. Також це спільний сервер ubuntu.


Схоже, це просто добре вмирає. На вашому lsofвиході кожен раз з’являється новий під. Процес просто перезапускається.
Патрік

Так, воно не хоче вічно вмирати. Прокидається так, як ніколи не помер :(
Lakshminarayanan Guptha,

Відповіді:


26

Починається автоматично з іншого ідентифікатора процесу , це означає, що це інший процес. Таким чином, відбувається батьківський процес, який стежить за своїми дітьми, і якщо хтось помирає, його відновлює батько. Якщо ви хочете повністю припинити службу, дізнайтеся, як зупинити батьківський процес. Вбивство це SIGKILL, звичайно, один із варіантів, але, мабуть, не Правий ТМ , оскільки монітору служби може знадобитися зробити чистку, щоб правильно вимкнутись.

Щоб знайти процес монітора, можливо, вам доведеться ознайомитись із усім списком процесів, оскільки фактичні слухачі можуть відмежуватися від своїх батьків (зазвичай fork() + setsid()комбінацією). У цьому випадку я вважаю, що результат ps faux( procpsпринаймні, може відрізнятися для інших реалізацій) досить зручним - він перераховує всі процеси в ієрархічному дереві. Якщо не було обгортання PID (див. Також wikipedia ), PID монітора повинен бути меншим, ніж PID будь-якого із слухачів (якщо, звичайно, ви не потрапили на PID-обгортку).


Її батько - shчий батько sudo. Це нормально вбивати їх?
Lakshminarayanan Guptha

Батько якого процесу? Той, хто слухає порт 3002? У цьому випадку перерахуйте всі процеси та вгадайте, який із моніторів. За допомогою Linux procpsя зазвичай вважаю, що результат ps -fauxє досить інформативним. Також зауважте, що PID монітора повинен бути меншим, ніж PID фактичного слухача (якщо у вас система не працює протягом певного часу і PID вже завернуті з моменту запуску послуги).
петерф

Чудово. ps -fauxдопомогли почати вбивати від батьків. Чи можете ви, будь ласка, оновити свою відповідь на рішення з коментаря?
Lakshminarayanan Guptha

Так, я думав про це ... :)
peterph

ps fauxдопомогли виявити, supervisordякий нескінченно перезавантажився повішеним демоном черги Laravel
antongorodezkiy

4

Якщо ви знаєте порт прослуховування процесу, ви можете використовувати fuserз -kпрапором.

Щось на зразок,

fuser -k 3002/tcp
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.