Mam skrypt bash, w którym chcę uruchamiać niepowiązane polecenia w rozwidlonych procesach. Polecenia te powinny być uruchamiane tylko w procesie rozwidlonym, podczas gdy inne polecenia powinny być uruchamiane tylko w rodzicach.
echo "I am parent statement 1"
( echo "I am child statement 1"; echo "I am child statement 2"; sleep 30) &
echo "I am parent statement 2"
W tym przykładzie powłoka macierzysta wyśle tylko instrukcje „nadrzędne”, a dziecko tylko echo „instrukcji potomnych”? Czy dziecko powróci do instrukcji rodzica 2 po powrocie?
Czy rodzic będzie czekał na dziecko (spał 30)? Czy też rodzic wyjdzie, a dziecko będzie działało przez 30 sekund?
Odpowiedzi:
0 dla odpowiedzi № 1Każdy proces będzie uruchamiał tylko własne instrukcje.
Jeśli nieznacznie zmodyfikujesz skrypt, możesz wykonać eksperyment, który pokaże, że dziecko przeżywa rodzica.
#!/bin/bash
echo "I am parent statement 1"
( echo "I am child statement 1"; echo "I am child statement 2"; sleep 30) &
jobs -l
echo "I am parent statement 2"
echo $$
Jeśli uruchomisz skrypt, a następnie zrobisz ps aux | grep <pid>
zarówno dla rodzica, jak i dziecka, zobaczysz, że rodzic umarł, gdy dziecko żyje dalej.