2016-03-12 4 views
0

sur Linux (CentOS 6), je veux tuer le processus contenant "pkgacc" dans sa commande (donc pas de commande exacte, mais seulement une correspondance partielle) s'il est exécuté plus de 36 heures.Comment tuer certains processus s'exécutant plus de 36 heures et contenant certaines phrasse dans sa commande?

Il ya une question connexe: How do you kill all Linux processes that are older than a certain age? mais l'une des solutions fournies ne fonctionne pas pour moi.

lors de l'exécution:

if [[ "$(uname)" = "Linux" ]];then killall --older-than 1h someprocessname;fi 

Il suffit de retourner la page d'utilisation killall sur la façon d'utiliser killall, dans sa page de manuel il n'y a aucune mention de "--older-que" interrupteur.

+0

Cela semble être lié et peut aider: http://serverfault.com/a/166044 – 16851556

Répondre

1

Il est infiniment plus facile d'invoquer un programme dans un wrapper comme timeout de GNU coreutils que d'aller les chercher après coup. En particulier parce timeout possède son processus, il n'y a aucune ambiguïté qu'il tue le bon processus. Donc

timeout 36h pkgaccess --pkg_option --another_option package_name 

où j'ai inventé les noms et les options pour la commande pkgaccess puisque vous ne les avez pas donnés. Ce processus ne durera pas plus de 36 heures.

0

Je pense que vous pourriez faire quelque chose comme

ps -eo pid,cmd,etime 

vous pouvez alors analyser la sortie avec grep recherche pour vous traiter, quelque chose comme ça:

ps -eo pid,cmd,etime | grep pkgacc 

vous aurez une sortie avec un ou plus de résultat, la dernière colonne de la sortie doit être le temps de processus en cours, donc un peu plus bas effort et vous pouvez vérifier si le temps est supérieur à 36 heures.

#!/bin/bash 

FOO=$(ps -eo pid,cmd,etime | grep -m 1 pkgacc | awk '{ print $1" "$3 }'| sed -e 's/\://g') 
IFS=' ' read -r -a array <<< "$FOO" 
if [ "${array[1]}" -gt "360000" ]; then 
    echo "kill the process: ${array[0]}" 
else 
    echo "process was not found or time less than 36 hours" 
fi 

Je pense que cela pourrait résoudre une partie de votre problème, voir que je ne tue pas explicitement le processus, mais simplement indiquer ce qu'il est. Vous pourriez améliorer l'idée de cela.