¿Qué pasa si 'kill -9' no funciona? o ¿Cómo matar un script que inicia nuevos procesos? no me ayuda de ninguna manera.
Tengo un script de Python que comienza automáticamente con otra identificación de proceso que usa el mismo puerto cuando se mata usando 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)
No es un proceso zombi.
$ 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
Incluso lo he intentado sudo pkill -f <processname>
sin suerte. No quiere morir.
Actualizar:
Su proceso padre es sh
cuyo padre es sudo
como se menciona en la tabla anterior. No estoy seguro de si es seguro matarlos abruptamente. Además, este es un servidor ubuntu compartido.
lsof
salida muestra un nuevo pid cada vez. El proceso simplemente se está reiniciando.Respuestas:
Se inicia automáticamente con otra ID de proceso, lo que significa que es un proceso diferente. Por lo tanto, hay un proceso padre, que monitorea a sus hijos, y si uno muere, el padre lo reaparece. Si desea detener el servicio por completo, descubra cómo detener el proceso principal. Matarlo
SIGKILL
es, por supuesto, una de las opciones, pero probablemente no sea The Right One TM , ya que el monitor de servicio podría necesitar una limpieza para apagarse correctamente.Para encontrar el proceso de supervisión, es posible que deba inspeccionar toda la lista de procesos, ya que los oyentes reales pueden disociarse de sus padres (generalmente por el
fork() + setsid()
combo). En este caso, encuentro que la salida deps faux
(procps
al menos, puede variar para otras implementaciones) bastante útil: enumera todos los procesos en un árbol jerárquico. A menos que haya habido un ajuste de PID (consulte también wikipedia ), el PID del monitor debe ser más pequeño que el PID de cualquiera de los oyentes (a menos que, por supuesto, golpee un envolvente de PID).fuente
sh
quién es padresudo
. ¿Está bien matarlos?procps
, generalmente encuentro que la salida deps -faux
es suficientemente informativa. También tenga en cuenta que el PID del monitor debe ser más pequeño que el PID del oyente real (a menos que tenga el sistema activo durante algún tiempo y los PID ya estén envueltos desde que se inició el servicio, por supuesto).ps -faux
ayudó a comenzar a matar de los padres. ¿Puedes actualizar tu respuesta con la solución del comentario?ps faux
ayudó a detectarsupervisord
que reinició sin cesar ahorcado Laravel queue daemonSi conoce el puerto de escucha del proceso, puede usarlo
fuser
con-k
flag.Algo como,
fuente