Jedním – nepochybně těžkopádným – přístupem je použití strace
:
$ strace -e trace=none -e signal=none -p 12345
bude proces sledovat s PID 12345, nezachytí žádné systémové volání (první -e
) a žádné signály (druhý -e
). Jakmile proces skončí běžným způsobem, bude vytištěna výstupní hodnota.
Pokud je proces ukončen signálem, strace se tiše ukončí (při spuštění s výše uvedenými možnostmi). Můžete použít např. -e signal=kill
změnit toto chování. Všimněte si však, že -e signal=all
(nebo ekvivalentně vynecháním -e signal
volba) může produkovat velké množství výstupu, pokud jsou signály přijímány a zpracovávány programem.
-
Řetězení provádění „notify“
$ process; notify $? &
Všimněte si, že pokud proces skončí neočekávaným způsobem
notify
nebude proveden -
Nastavení pastí
Proces je signalizován signály jiného významu a může vhodně reagovat
#!/bin/bash process function finish { notify $? } trap finish EXIT
Není vám jasné, jaké oznámení máte na mysli. V podstatě to může být cokoliv, co samozřejmě zazvoní. Jeden za mnoho, např. notify-send
od libnotify
knihovna.
$ process; notify-send "process finished with status $?" &
Bash to udělá za vás. Upozorní vás na ukončení procesu tím, že vám vrátí kontrolu a uloží stav ukončení do speciální proměnné $?
. Vypadá to zhruba takto:
someprocess
echo $?
Další informace naleznete v příručce bash o speciálních parametrech.
Předpokládám ale, že na počkání chcete dělat jinou práci. V bash to můžete udělat takto:
someprocess &
otherwork
wait %+
echo $?
someprocess &
spustí proces na pozadí. To znamená, že ovládání se okamžitě vrátí a vy můžete dělat jinou práci. Proces spuštěný na pozadí se v bash nazývá job. wait
počká na dokončení dané úlohy a poté vrátí stav ukončení této úlohy. Na úlohy se odkazuje %n
. %+
odkazuje na poslední zahájenou práci. Další informace naleznete v příručce bash o řízení úloh.
Pokud opravdu potřebujete PID, můžete to udělat také takto:
someprocess &
PID=$!
otherwork
wait $PID
echo $?
$!
je speciální proměnná obsahující PID posledního spuštěného procesu na pozadí.