Chcę wiedzieć, kiedy uruchomiony proces zostanie zakończony. Jak mogę to obejrzeć?

14

Chciałbym poznać każde polecenie, które mogę uruchomić, aby poznać godzinę zakończenia procesu.

Już uruchomiłem ten proces i znam jego PID, ale chcę wiedzieć, czy jest jakieś polecenie, które może mi powiedzieć, o której godzinie się zakończyło.

Dzięki za pomoc.

użytkownik2504890
źródło
7
Interesujące pytanie. W każdym razie, następnym razem, gdy uruchomisz komendę, która zajmuje dużo czasu, rozważ użycie at(patrz strona podręcznika:) man at. Spowoduje to umieszczenie go w kolejce jako zadania, zostaniesz powiadomiony o zakończeniu, itp. Jest to bardzo proste, podobne do Crona, ale dla pojedynczych ujęć zadań.
gertvdijk

Odpowiedzi:

11

Uruchomić to:

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

Lub możesz zrobić skrypt 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")."

Następnie daj mu pozwolenie na wykonanie:

chmod +x wait-for-death.sh

i uruchom go, przekazując proces PID:

./wait-for-death.sh <PID>
Eric Carvalho
źródło
while kill -0 <pid>; do ...jest bardziej przenośny - będzie działał również na systemach innych niż Linux. I nie ma powodu, aby używać bash - twój kod nie używa żadnych bashism, więc tutaj /bin/shjest w porządku.
Richard Hansen
1
@RichardHansen ta strona dotyczy Ubuntu, to nie jest StackOverflow.
hytromo
@RichardHansen Dzięki za kill -0, myślę, że to bardziej eleganckie rozwiązanie.
Eric Carvalho,
@hakermania: Rozumiem, dlatego wciąż dawałem +1. Wskazałem tylko kilka sposobów na uczynienie skryptu bardziej przenośnym na wypadek, gdyby ktoś chciał zrobić to samo na BSD / Solaris / etc. system. Uważam, że dobrym pomysłem jest pozostanie przy POSIX, chyba że istnieje powód, aby zrobić coś specyficznego dla Ubuntu. W takim przypadku nie ma powodu, aby nie pisać skryptu zgodnego z POSIX.
Richard Hansen
2

Jeśli chcesz uniknąć kolizji PID, możesz użyć 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
źródło
0

Może polecenie timepasuje do twoich potrzeb:

time [options] command [arguments...]

Przykład:

time /local/usr/bin/myProcess arg1 arg2

Po zakończeniu procesu timepokażą się statystyki, takie jak czas potrzebny na ukończenie procesu (w sekundach, jak sądzę).

Sprawdź stronę podręcznika lub po prostu spojrzeć na to online, strony człowieka .

roko
źródło
OP powiedział, że „już rozpoczął proces”, więc timenie ma takiej opcji.
Eric Carvalho,