UNIX- Identifica quais processos estão sendo executados mais de 6 horas

0

Eu preciso saber quais processos estão sendo executados por mais de 6 horas no UNIX. Como posso descobrir isso?

    
por Grant Palin 12.09.2013 / 21:11

2 respostas

2

Dependendo do que você tem disponível, a abordagem geral pode ser:

ps -o pid,lstart

e execute um loop for sobre os resultados usando algo como:

date -j -f %c "$sdate" +%s

para converter a data em um timestamp do UNIX. De lá algo como:

time=$(('date +%s'-'date -j -f %c "$sdate" +%s'))
echo $time

deve fornecer o número de segundos que o processo está sendo executado. converter para horas é então trivial.

O curto e longo é que você vai acabar escrevendo um script.

    
por 12.09.2013 / 22:17
0

Você pode usar a seguinte função para obter o tempo de passagem do processo em minutos

GetProcTime() {
    local p=$1
    ps -eao "%C %U %c %t" | 
    awk "/$p/"'{print $4}' | 
    awk -F":" '{{a=$1*60} {b=a+$2}; if ( NF != 2 ) print b ; else print $1 }'
}

Teste

root@ubuntu:/tmp# GetProcTime monit
10
root@ubuntu:/tmp# if [[ $(GetProcTime monit) -ge 360 ]]; then echo "Process is running more than 6 hrs"; else echo "OK"; fi
OK
root@ubuntu:/tmp# GetProcTime init
466
root@ubuntu:/tmp# if [[ $(GetProcTime init) -ge 360 ]]; then echo "Process is running more than 6 hrs"; else echo "OK"; fi
Process is running more than 6 hrs
    
por 17.09.2013 / 12:06