Что если «kill -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
вывод показывает новый pid каждый раз. Процесс просто перезапускается.Ответы:
Автоматический запуск с другим идентификатором процесса означает, что это другой процесс. Таким образом, существует родительский процесс, который контролирует своих потомков, и если он умирает, он возрождается родителем. Если вы хотите полностью остановить службу, узнайте, как остановить родительский процесс. Убить его
SIGKILL
- это, конечно, один из вариантов, но, возможно, не The Right One TM , поскольку для корректного завершения работы сервисному монитору может потребоваться некоторая очистка.Чтобы найти процесс мониторинга, вам может понадобиться просмотреть весь список процессов, поскольку фактические слушатели могут отмежеваться от своего родителя (обычно с помощью
fork() + setsid()
комбинации). В этом случае я нахожу выводps faux
(procps
по крайней мере, может отличаться для других реализаций) довольно удобным - он перечисляет все процессы в иерархическом дереве. Если не было PID-обертки (см. Также Википедию ), PID монитора должен быть меньше, чем PID любого из слушателей (если, конечно, вы не наткнулись на PID-обертку).источник
sh
чей родительsudo
. Это нормально, чтобы убить их?procps
я обычно нахожу выводps -faux
достаточно информативным. Также обратите внимание, что PID монитора должен быть меньше, чем PID фактического слушателя (если вы не включили систему в течение некоторого времени и PID уже не были обернуты, так как служба была запущена, конечно).ps -faux
помог начать убивать с родителя. Можете ли вы обновить свой ответ с решением из комментария?ps faux
помог обнаружить,supervisord
который бесконечно перезагружалЕсли вы знаете порт прослушивания процесса, вы можете использовать
fuser
с-k
флагом.Что-то вроде,
источник