Lösung 1:
Sie können dies mit einer Kombination aus ps , awk und kill tun:
ps -eo pid,etime,comm
Gibt Ihnen eine dreispaltige Ausgabe mit der Prozess-PID, der verstrichenen Zeit seit dem Start des Prozesses und dem Befehlsnamen ohne Argumente. Die verstrichene Zeit sieht wie folgt aus:
mm:ss
hh:mm:ss
d-hh:mm:ss
Da Sie Prozesse suchen, die seit mehr als einer Woche laufen, würden Sie nach Zeilen suchen, die diesem dritten Muster entsprechen. Sie können awk verwenden, um die Prozesse nach Laufzeit und Befehlsnamen herauszufiltern, etwa so:
ps -eo pid,etime,comm | awk '$2~/^7-/ && $3~/mycommand/ { print $1 }'
Dadurch werden die PIDs aller Befehle gedruckt, die mit 'mycommand' übereinstimmen und seit mehr als 7 Tagen ausgeführt werden. Leite diese Liste an kill weiter und du bist fertig:
ps -eo pid,etime,comm | awk '$2~/^7-/ && $3~/mycommand/ { print $1 }' | kill -9
Lösung 2:
killall --quiet --older-than 1w process_name