wait: wait [-n] [id ...]
Oczekiwanie na zakończenie zadania i zwrócenie stanu (kodu) wyjścia.
Oczekiwanie na każdy proces o podanym identyfikatorze ID, który może być
numerem PID lub określeniem zadania i zgłoszenie jego stanu (kodu)
zakończenia. Jeśli nie podano ID, polecenie oczekuje na wszystkie aktualnie
aktywne procesy potomne i zwraca prawdę. Jeśli ID jest określeniem zadania,
oczekuje na wszystkie procesy w potoku przetwarzania danego zadania.
Jeśli podano opcję -n, oczekiwanie na zakończenie następnego zadania
i zwrócenie jego kodu zakończenia.
Stan wyjściowy:
Zwracany jest stan zakończenia ID; niepowodzenie, jeśli ID jest
nieprawidłowe lub podano błędną opcję.
Informacja
Polecenie wait
zatrzymuje wykonywanie kolejnych komend do czasu zakończenia
działania uruchomionego procesu w tle (musi to być proces potomny aktualnej powłoki).
W poniższym przykładzie uruchomimy dwa procesy potomne, które będą czekały odpowiedni 10 i 2 sekundy na swoje zakończenie,
nastepnie wykorzystamy komendę wait
do „poczekania”, aż oba procesy potomne się zakończą.
Dla każdej istotnej komendy wypiszemy stopkę czasową poleceniem printf.
johny@ThinkPad:~$ bash <<\EOF
echo -e "\n"
printf "> START: %(%Y-%m-%d %H:%M:%S %Z (%A))T\n" -1
sleep 10 &
PPID1=$!
printf "> BGJOB1 (%d): %(%Y-%m-%d %H:%M:%S %Z (%A))T\n" $PPID1 -1
sleep 2 &
PPID2=$!
printf "> BGJOB2 (%d): %(%Y-%m-%d %H:%M:%S %Z (%A))T\n" $PPID2 -1
ps aux | grep -e $PPID1 -e $PPID2
wait $PPID1 $PPID2
printf "> STOP: %(%Y-%m-%d %H:%M:%S %Z (%A))T\n" -1
EOF
> START: 2019-03-02 08:15:25 CET (sobota)
> BGJOB1 (5564): 2019-03-02 08:15:25 CET (sobota)
> BGJOB2 (5565): 2019-03-02 08:15:25 CET (sobota)
johny 5564 0.0 0.0 15796 740 pts/1 S+ 08:15 0:00 sleep 10
johny 5565 0.0 0.0 15796 772 pts/1 S+ 08:15 0:00 sleep 2
johny 5567 0.0 0.0 22756 1108 pts/1 S+ 08:15 0:00 grep -e 5564 -e 5565
> STOP: 2019-03-02 08:15:35 CET (sobota)