Polecenie wait

man wait

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).

Przykłady użycia

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)