Voglio sapere quando terminerà un processo in esecuzione. Come posso vederlo?


14

Vorrei sapere qualsiasi comando che posso eseguire per conoscere l'ora di fine di un processo.

Ho già avviato il processo e conosco il suo PID, ma voglio sapere se c'è qualche comando che può dirmi a che ora è finito.

Grazie per l'aiuto.


7
Domanda interessante. Ad ogni modo, la prossima volta che esegui un comando che impiega molto tempo, considera di usare at(vedi la manpage:) man at. Questo lo metterà in coda come un lavoro, ti verrà notificato quando è finito, ecc. È molto semplice, simile a Cron, ma per singoli scatti di lavori.
gertvdijk,

Risposte:


11

Esegui questo:

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

Oppure puoi creare uno 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")."

Dagli quindi il permesso di esecuzione:

chmod +x wait-for-death.sh

ed eseguirlo passando il processo PID:

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

while kill -0 <pid>; do ...è più portatile - funzionerà anche su sistemi non Linux. E non c'è motivo di usare bash: il tuo codice non usa alcun bashismo, quindi /bin/shqui va benissimo.
Richard Hansen,

1
@RichardHansen questo sito parla di Ubuntu, non StackOverflow.
hytromo,

@RichardHansen Grazie per kill -0, penso che sia una soluzione più elegante.
Eric Carvalho,

@hakermania: ho capito, ecco perché l'ho ancora dato +1. Stavo solo sottolineando un paio di modi per rendere lo script più portatile nel caso in cui qualcuno volesse fare la stessa cosa su un BSD / Solaris / ecc. sistema. Credo che sia una buona idea attenersi a POSIX a meno che non ci sia un motivo per fare qualcosa di specifico per Ubuntu. In questo caso, non c'è motivo di non scrivere uno script conforme a POSIX.
Richard Hansen,

2

Se si desidera evitare le collisioni PID è possibile utilizzare 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

Forse il comando si timeadatta alle tue necessità:

time [options] command [arguments...]

Esempio:

time /local/usr/bin/myProcess arg1 arg2

Una volta terminato il processo timemostrerà alcune statistiche come il tempo impiegato per completare il processo (in pochi secondi penso).

Controlla la pagina man o dai un'occhiata a questa pagina man online .


OP ha detto che "ha già avviato il processo", quindi timenon è un'opzione.
Eric Carvalho,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.