J'ai besoin de la commande pour tuer les processus en cours d'exécution depuis au moins 5 minutes pour un processus donné.
Je devrai exécuter cette commande toutes les cinq minutes environ.
Mille mercis !
(le système est Centos5)
kill -9 $(ps -eo comm,pid,etimes | awk '/^procname/ {if ($3 > 300) { print $2}}')
où "procname" est un nom de processus et 300 est le seuil de temps d'exécution
-9
être un peu plus convivial pour mes processus et j'ai ajouté ungrep -v defunct |
avantawk
comme autre chose que vous pouvez voirprocname <defunct>
dans votre sortie, ce qui empêcherait la commande awk de renvoyer un PID valide. Et cela casserait la commande kill.$(ps -eo comm,pid,etimes | awk '/^procname/ {if ($3 > 300) { print "kill "$2}}')
c'est un peu plus fluide mais la réponse est quand même superPeut-être exécuter la commande longue comme celle-ci dans une crontab?
la source
Ma version de kill script, tirant parti des deux réponses précédentes:
Il filtre le processus par UID, NAME et si le temps d'exécution dépasse la limite - tue les processus et envoie le rapport par e-mail. Si vous n'avez pas besoin de cet e-mail, vous pouvez simplement commenter la dernière ligne.
la source
J'ai trouvé la solution sur cette page: http://www.directadmin.com/forum/showthread.php?t=26179
Créez un fichier vide et appelez-le killlongproc.sh
Copiez ceci:
Arrête ça dans ton cronjob
la source
kill -9
car cela ne donne pas aux processus la possibilité d'effectuer un nettoyage en douceur avant de quitter.Il y a ici un script que vous pouvez modifier pour faire ce que vous voulez.
EDIT a ajouté le script ci-dessous
la source
etimes
deps
pour vous montrer directement les secondes écoulées depuis le démarrage du processus (pas besoin de le calculer à partir de l'heure de début).ps
ne prennent pas en chargeetimes
(uniquementetime
), c'est une excellente alternative. Je viens d' utiliser quand la réponse haut m'a donné une erreur deps
J'ai dû résoudre une tâche similaire, et elle n'a pas besoin de script. Pour terminer (signal SIGTERM) les processus de l'exécutable "THECOMMAND":
La restriction à l'utilisateur actuel
-u $USER
n'est nécessaire que pour éviter les messages d'erreur inutiles si d'autres utilisateurs exécutent également "THECOMMAND". Dans votre propre crontab utilisateur, vous devez saisir les informations suivantes:Dans une crontab système (utilisateur 'root'), vous ajouteriez ce qui suit:
Si vous voulez tuer (SIGKILL) les processus au lieu de les terminer (SIGTERM), envoyez explicitement le signal SIGKILL en ajoutant
--signal SIGKILL
aux paramètres. Exemple pour un système crontab:la source
Pour httpd
ps eaxo pid, temps, comm | queue -n + 2 | grep 'httpd' | awk 'substr (0,9,1 $)> 0' | awk '{print $ 1}'
la source