Et si 'kill -9' ne fonctionne pas? ou Comment tuer un script qui démarre de nouveaux processus? ne m'aide pas de toute façon.
J'ai un script python qui démarre automatiquement avec un autre identifiant de processus utilisant le même port lorsqu'il est tué en utilisant 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)
Ce n'est pas un processus Zombie.
$ 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
J'ai même essayé sudo pkill -f <processname>
sans succès . Il ne veut pas mourir.
Mise à jour:
C'est le processus parent sh
dont le parent est sudo
comme mentionné dans le tableau ci-dessus. Je ne sais pas s'il est sûr de les tuer brusquement. Il s'agit également d'un serveur Ubuntu partagé.
lsof
sortie affiche un nouveau pid à chaque fois. Le processus redémarre simplement.Réponses:
Démarre automatiquement avec un autre ID de processus signifie qu'il s'agit d'un processus différent. Il y a donc un processus parent, qui surveille ses enfants, et si l'un meurt, il est réapparu par le parent. Si vous souhaitez arrêter complètement le service, découvrez comment arrêter le processus parent. Le tuer
SIGKILL
est bien sûr l'une des options, mais probablement pas The Right One TM , car le moniteur de service peut avoir besoin de faire un peu de nettoyage pour s'arrêter correctement.Pour trouver le processus de surveillance, vous devrez peut-être inspecter toute la liste des processus, car les écouteurs réels peuvent se dissocier de leurs parents (généralement par le
fork() + setsid()
combo). Dans ce cas, je trouve la sortie deps faux
(duprocps
moins, peut varier pour d'autres implémentations) plutôt pratique - elle répertorie tous les processus dans une arborescence hiérarchique. Sauf s'il y a eu un habillage PID (voir aussi wikipedia ), le PID du moniteur doit être plus petit que le PID de tous les auditeurs (à moins bien sûr que vous n'atteigniez un enveloppement PID).la source
sh
dont le parent estsudo
. Est-il acceptable de les tuer?procps
, je trouve généralement que la sortie deps -faux
est suffisamment informative. Notez également que le PID du moniteur doit être plus petit que le PID de l'écouteur réel (à moins que vous n'ayez le système en place depuis un certain temps et que les PID soient déjà encapsulés depuis le démarrage du service, bien sûr).ps -faux
aidé à commencer à tuer du parent. Pouvez-vous mettre à jour votre réponse avec la solution du commentaire?ps faux
a aidé à détecter lesupervisord
redémarrage sans fin du démon de file d'attente LaravelSi vous connaissez le port d'écoute du processus, vous pouvez l'utiliser
fuser
avec-k
flag.Quelque chose comme,
la source