Como alterar o formato da hora para segundos em ps -p?

1

Eu escrevi um script rsync que também verifica quanto tempo o processo do script está sendo executado.

Esta é a parte relevante:

time=$(ps -p $processid -o etime= | awk -F: '{print $2}') # number of seconds the process is running.

if [ $(ps -ef | grep $(basename $0) &>/dev/null && echo $?) -eq "0" ] && [ "$time" -gt "5" ]; then # Check if there's a running process with the script name which is running for more than 5 seconds.
        echo "$message"
        print_log $message
        print_log "--------- END --------"
        exit 1
fi

Às vezes, o processo fica preso e é executado por mais de 5 segundos (e até dias), portanto, a parte acima do script deve gravá-lo no log.

Ao executar:

ps -p PID -o etime=

Retorna quanto tempo o processo está sendo executado. Exemplo:

43:36

Mas se o processo estiver em execução há mais de um dia, a saída será assim:

[root@do01 ~]# ps -p 28518 -o etime=
 7-22:43:36

Minha pergunta é: como posso obter esse número em segundos? porque preciso ter certeza de que o processo não está em execução há mais de 5 segundos.

    
por Itai Ganot 24.06.2015 / 09:26

2 respostas

2

Você pode tentar algo como:

time=$(ps -p $processid -o etime= | tr -d ' ');
time_in_seconds=$(case ${#time} in "8") echo ${time: -2}+${time: -5:2}*60+${time: -8:2}*3600 | bc;;  "5")  echo ${time: -2}+${time: -5:2}*60 | bc;; *) echo $(echo $time | cut -d'-' -f1)*86400+${time: -2}+${time: -5:2}*60+${time: -8:2}*3600 | bc;; esac)
echo $time_in_seconds

As versões mais recentes têm a opção etimes , que retorna o tempo em segundos.

    
por 24.06.2015 / 11:54
-1

Isso dará saída em segundos no Ubuntu. Não funciona no RedHat.

ps -p PID -o etimes=

    
por 23.11.2015 / 11:07