Quiero saber cuándo terminará un proceso en ejecución. ¿Cómo puedo verlo?

14

Me gustaría conocer cualquier comando que pueda ejecutar para conocer la hora de finalización de un proceso.

Ya he iniciado el proceso y conozco su PID, pero quiero saber si hay algún comando que pueda decirme a qué hora terminó.

Gracias por tu ayuda.

user2504890
fuente
77
Interesante pregunta. De todos modos, la próxima vez que ejecute un comando que tome mucho tiempo, considere usar at(vea la página de manual:) man at. Esto lo pondrá en cola como un trabajo, se le notificará cuando esté terminado, etc. Es muy básico, similar a Cron, pero para tomas individuales de trabajos.
gertvdijk

Respuestas:

11

Ejecuta esto:

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

O puedes hacer un 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")."

Luego dale permiso de ejecución:

chmod +x wait-for-death.sh

y ejecutarlo pasando el proceso 'PID:

./wait-for-death.sh <PID>
Eric Carvalho
fuente
while kill -0 <pid>; do ...es más portátil, también funcionará en sistemas que no sean Linux. Y no hay ninguna razón para usar bash: su código no usa bashismos, por lo que /bin/shestá perfectamente bien aquí.
Richard Hansen
1
@RichardHansen este sitio es sobre Ubuntu, esto no es StackOverflow.
hytromo
@ RichardHansen Gracias por kill -0, creo que es una solución más elegante.
Eric Carvalho
@hakermania: Entiendo, por eso todavía le di +1. Solo estaba señalando un par de formas de hacer que el script sea más portátil en caso de que alguien quisiera hacer lo mismo en un BSD / Solaris / etc. sistema. Creo que es una buena idea mantener POSIX a menos que haya una razón para hacer algo específico de Ubuntu. En este caso, no hay razón para no escribir un script compatible con POSIX.
Richard Hansen
2

Si desea evitar colisiones PID, puede 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)"
l0b0
fuente
0

Tal vez el comando se timeajuste a su necesidad:

time [options] command [arguments...]

Ejemplo:

time /local/usr/bin/myProcess arg1 arg2

Una vez que finalice el proceso, timese mostrarán algunas estadísticas, como el tiempo necesario para completar el proceso (en segundos, creo).

Consulte la página de manual o simplemente eche un vistazo a esta página de manual en línea .

roko
fuente
OP dijo que "ya lanzó el proceso", por timelo que no es una opción.
Eric Carvalho