Quero saber quando um processo em execução será encerrado. Como posso assistir?


14

Gostaria de conhecer qualquer comando que possa executar para saber o horário final de um processo.

Já iniciei o processo e conheço seu PID, mas quero saber se existe algum comando que possa me dizer a que horas ele terminou.

Obrigado pela ajuda.


7
Pergunta interessante. De qualquer forma, da próxima vez que você executar um comando que demore muito, considere usar at(consulte a página de manual:) man at. Isso o enfileirará como um trabalho, você será notificado quando terminar, etc. É muito básico, semelhante ao Cron, mas para fotos únicas de trabalhos.
gertvdijk

Respostas:


11

Rode isto:

while kill -0 <PID>; do sleep 1; done; echo "Process finished at $(date +"%F %T")."

Ou você pode criar um script bash. wait-for-death.sh:

#!/bin/bash

if ! kill -0 $1; then
    echo "Process $1 doesn't exist."
    exit 1
fi

while kill -0 $1; do
    sleep 1
done

echo "Process $1 finished at $(date +"%F %T")."

Em seguida, dê permissão de execução:

chmod +x wait-for-death.sh

e execute-o passando o processo 'PID:

./wait-for-death.sh <PID>

while kill -0 <pid>; do ...é mais portátil - também funcionará em sistemas não Linux. E não há razão para usar o bash - seu código não usa nenhum bashism, por isso /bin/shé perfeitamente adequado aqui.
Richard Hansen

1
@RichardHansen Este site é sobre Ubuntu, este não é o StackOverflow.
hytromo

@RichardHansen Obrigado por kill -0, acho que é uma solução mais elegante.
Eric Carvalho

@ hakermania: Eu entendo, e é por isso que eu ainda dei +1. Eu estava apenas apontando algumas maneiras de tornar o script mais portátil, caso alguém quisesse fazer a mesma coisa em um BSD / Solaris / etc. sistema. Acredito que é uma boa ideia manter o POSIX, a menos que haja uma razão para fazer algo específico do Ubuntu. Nesse caso, não há razão para não escrever um script compatível com POSIX.
Richard Hansen

2

Se você deseja evitar colisões PID, pode usar at:

job_id=$(at now <<< 'sleep 10' 2>&1 | awk 'END {print $2}')
while at -l | grep -q "^${job_id}\s"
do
    sleep 1
done
echo "Process finished at $(date)"

0

Talvez o comando seja timeadequado à sua necessidade:

time [options] command [arguments...]

Exemplo:

time /local/usr/bin/myProcess arg1 arg2

timeQuando o processo terminar , algumas estatísticas serão exibidas, como o tempo necessário para concluir o processo (em segundos, eu acho).

Verifique a página de manual ou apenas dê uma olhada nesta página de manual online .


OP disse que "já lançou o processo", então timenão é uma opção.
Eric Carvalho
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.