Solution 1 :
Vous pouvez le faire avec une combinaison de ps , awk et kill :
ps -eo pid,etime,comm
Vous donne une sortie à trois colonnes, avec le PID du processus, le temps écoulé depuis le démarrage du processus et le nom de la commande, sans arguments. Le temps écoulé ressemble à l'un de ces éléments :
mm:ss
hh:mm:ss
d-hh:mm:ss
Étant donné que vous souhaitez des processus exécutés depuis plus d'une semaine, vous recherchez des lignes correspondant à ce troisième modèle. Vous pouvez utiliser awk pour filtrer les processus par durée d'exécution et par nom de commande, comme ceci :
ps -eo pid,etime,comm | awk '$2~/^7-/ && $3~/mycommand/ { print $1 }'
qui imprimera les pid de toutes les commandes correspondant à 'mycommand' qui ont été exécutées pendant plus de 7 jours. Dirigez cette liste vers kill, et vous avez terminé :
ps -eo pid,etime,comm | awk '$2~/^7-/ && $3~/mycommand/ { print $1 }' | kill -9
Solution 2 :
killall --quiet --older-than 1w process_name