Parfois, l'envoi d'un SIGTERM à un processus entraînera l'envoi de SIGTERM à tous ses processus enfants. Cependant, parfois cela ne fonctionne pas.
Existe-t-il une commande ou un utilitaire qui me permettra de tuer un processus et tous ses processus enfants en même temps? J'ai généralement recours à la collecte manuelle de tous les pids dans une seule commande kill, mais cela semble stupide.
Cette question SO demande comment faire cela avec perl, mais tout ce qui fait le travail serait génial.
pkill -9
c'est plus puissant quepkill
pour quelque raison que ce soit.Réponses:
Cette question SO couvre cela.
la source
En supposant que les processus partagent un identifiant de session (ce qu'ils devraient sauf s'ils ont explicitement appelé setsid (), vous pouvez les tuer par session en utilisant pkill:
Si depuis un autre terminal je fais:
Puis tout meurt d'un seul coup.
Vous pouvez également tuer par groupe de processus, bien que cela ait tendance à être plus utile pour de nombreux enfants qui se trouvent tous un niveau en dessous d'un parent, et non une chaîne de processus associés.
la source
Habituellement, un client répondant doit recevoir un sigterm et se désactiver lui-même, mettant ainsi fin à tous ses processus enfants bifurqués. Si, en revanche, le client ne répond pas, un signal de terminaison normal n'évoquera probablement aucune réponse.
Donc, vous continuez ensuite à envoyer un SIGKILL, qui indique au système lui-même de faire arrêter ce processus, maintenant - ce qu'il peut faire la plupart du temps, sauf lorsque le processus est dans un état de sommeil ininterruptible, comme attendre des E / S entrée ou similaire.
Dans ce cas, même le SIGKILL finira par ne rien faire dans le processus; le processus enfant sera probablement dans un état de retard similaire.
Il existe un cas limite où le processus parent peut se terminer très bien, mais le processus enfant n'est pas éliminable. Ensuite, vous vous retrouverez avec un processus zombie qui ne peut pas être nettoyé depuis que son père est parti, mais il ne répond à rien. La seule façon de s'en débarrasser est un redémarrage; dans la plupart des cas, cependant, ils sont tout à fait inoffensifs, car la seule chose qu'ils font est de prendre un PID alors que la prise qu'ils ont essayé d'utiliser s'est déjà fanée.
la source
Si je veux tuer l'arborescence des processus de Firefox, est-il possible de le tuer par la commande ci-dessus "pkill -9 -s firefox"
la source