Soluzione 1:
Puoi farlo con una combinazione di ps , awk e kill:
ps -eo pid,etime,comm
Fornisce un output di tre colonne, con il PID del processo, il tempo trascorso dall'avvio del processo e il nome del comando, senza argomenti. Il tempo trascorso è simile a uno di questi:
mm:ss
hh:mm:ss
d-hh:mm:ss
Dal momento che desideri processi in esecuzione da più di una settimana, cercherai le righe che corrispondono a quel terzo modello. Puoi usare awk per filtrare i processi in base al tempo di esecuzione e al nome del comando, in questo modo:
ps -eo pid,etime,comm | awk '$2~/^7-/ && $3~/mycommand/ { print $1 }'
che stamperà i pid di tutti i comandi corrispondenti a "mycommand" che sono in esecuzione da più di 7 giorni. Inserisci l'elenco in kill e il gioco è fatto:
ps -eo pid,etime,comm | awk '$2~/^7-/ && $3~/mycommand/ { print $1 }' | kill -9
Soluzione 2:
killall --quiet --older-than 1w process_name