/ / Bash rozwidla podpowłokę - linux, bash, shell, fork

Bash rozwidla podpowłokę - linux, bash, shell, fork

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 № 1

Każ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.