Você pode tentar formatar a saída de ps:
ps -ae -o start,pid,command
Se o processo tiver mais de 24 horas, ele mostrará a data em vez da hora na primeira coluna.
Usando este comando, posso encontrar todos os processos para wget
:
ps -aef | grep -i wget
Mas eu quero um comando ou um script que possa me fornecer os processos com mais de um dia para wget
e kill
.
Você pode tentar formatar a saída de ps:
ps -ae -o start,pid,command
Se o processo tiver mais de 24 horas, ele mostrará a data em vez da hora na primeira coluna.
Desde que você diga "mais de 24 horas" quando disser mais que um dia, isso deve funcionar.
for wgetpid in $(ps -eo "%t %p %c" | grep "^ *[0-9][0-9]*-" | grep wget | cut -d ' ' -f 2);
do
kill -9 $wgetpid
done
O comando ps -eo produz o tempo (no formato [[dd-] hh:] mm: ss), o pid e o nome do processo.
Se o processo estiver em execução há menos de 24 horas, não há - no tempo.
O primeiro comando grep combina linhas que começam com (^) zero ou mais espaços (processos em execução por 1 a 9 dias são recuados se houver algum processo em execução por 10 ou mais dias), um número, zero ou mais números (para um número de dígitos de 2+ ou mais), então o - indica que o número anterior era de dias.
O segundo grep filtra os processos abaixo para wget.
O comando cut pega apenas o segundo campo (o pid).
Em seguida, o loop for percorre esses pids e mata cada um deles.