web-dev-qa-db-fra.com

Processus Zombie (élimine les processus enfants et parents)

Question: Je veux m'assurer que les processus enfant et parent sont tous deux tués et qu'ils échouent s'ils réussissent ou non. Je suis nouveau sur l'aide de script bash et ayant un problème avec ma sortie.

#!/bin/bash
for p in $(ps jauxww | grep Z | grep -v PID | awk '{print $3}'); do
for everyone in $(ps auxw | grep $p | grep cron | awk '{print $2}');do
kill -9 $everyone;
echo(Detected zombie process:"$PID". "$usr": . Successfully Killed);
else
echo (Detected zombie process:"$PID".  "$usr": . Could not kill);
done;
done;
4
user3613649

Vous ne pouvez pas tuer un Zombie, il est déjà mort. Il s'agit simplement d'une entrée dans la table de processus avant que le processus parent ne wait(2) pour lire son statut de sortie.

Sur une note différente, pour tuer le processus parent de tout processus (y compris Zombie), vous pouvez facilement utiliser une combinaison de commandes ps et kill:

ps -p <pid> -o ppid=

utilisera le PPID (ID de processus parent) du processus ayant le PID (ID de processus) <pid>.

Ainsi, par exemple, pour trouver le PPID du processus ayant le PID 2345:

ps -p 2345 -o ppid=

Vous pouvez le transmettre à kill à l'aide de la substitution de commande $():

kill "$(ps -p 2345 -o ppid=)"

D'autre part, pour tuer un processus à l'aide de son PPID, utilisez pkill:

pkill -P <PPID>

Par exemple, pour tuer le processus ayant PPID 1234:

pkill -P 1234

De plus, à moins que cela ne soit absolument nécessaire, n'utilisez pas SIGKILL (kill -9) car le processus ne peut être nettoyé et pourrait entraîner des effets indésirables.

3
heemayl