2010-05-04 26 views
3

J'ai bricolé une réponse regex par yukondude avec peu de succès. J'essaie de tuer les processus qui datent de plus de 10 minutes. Je sais déjà quels sont les identifiants de processus. Je suis en boucle sur un tableau toutes les 10 min pour voir si des procs persistants sont autour et doivent être tués. Quelqu'un a-t-il une idée rapide à ce sujet?Tuer un processus zombie vieux de 10 minutes dans le script bash linux

ps -eo uid,pid,etime 3233332 | egrep ' ([0-9]+-)?([0-9]{2}:?){3}' | awk '{print $2}' | xargs -I{} kill {} 
+0

Echo ... écho ... ** ... ** ... –

Répondre

6

Tout comme les vrais Zombies, les processus Zombie ne peuvent pas être détruits - ils sont déjà morts.

Ils vont disparaître quand leur processus parent appelle wait() pour obtenir leur code de sortie, ou lorsque leurs sorties de processus parent.


Oh, vous ne parlez pas du tout de processus Zombie. Ce script bash devrait être le long des lignes de ce que vous êtes après:

ps -eo uid,pid,lstart | 
    tail -n+2 | 
    while read PROC_UID PROC_PID PROC_LSTART; do 
     SECONDS=$[$(date +%s) - $(date -d"$PROC_LSTART" +%s)] 
     if [ $PROC_UID -eq 1000 -a $SECONDS -gt 600 ]; then 
      echo $PROC_PID 
     fi 
    done | 
    xargs kill 

qui va tuer tous les processus appartenant UID 1000 qui ont été en cours d'exécution plus de 10 minutes (600 secondes). Vous souhaitez probablement filtrer uniquement les PID qui vous intéressent - peut-être par ID de processus parent ou similaire? Quoi qu'il en soit, cela devrait être quelque chose à faire.

+0

Désolé, j'ai utilisé 'zombie' comme ce que j'ai été trouver quand googler. C'est en fait une partie d'un démon qui lance un script PHP qui parfois ne se termine pas correctement. – Steve

+0

Ah ça marche ... la plupart du temps. Je suis sur OSX ... y a-t-il un moyen de faire la comparaison des dates autre que la "date -d"? Mac n'autorise pas le -d. – Steve

+0

Eh bien, le problème est que 'ps' ne donne pas vraiment le temps écoulé ou l'heure de début du processus dans un format particulièrement agréable. Il est possible de l'analyser bien sûr, mais c'est difficile - la méthode la plus simple pourrait être de construire GNU 'date' pour votre machine OS X et de l'utiliser explicitement dans le script plutôt que dans le' date' du système. – caf