Kontekst:
Użytkownicy udostępniają mi swoje niestandardowe skrypty do uruchomienia. Skrypty te mogą być wszelkiego rodzaju jak skrypty do uruchamiania wielu programów GUI, usług zaplecza. Nie mam kontroli nad sposobem pisania skryptów. Skrypty te mogą być typu blokującego, tzn. Wykonywanie czeka do momentu zakończenia wszystkich procesów potomnych (programów uruchamianych sekwencyjnie)
#exaple of blocking script
echo "START"
first_program
second_program
echo "DONE"
lub typu nieblokującego, tzn. takie, które rozwidlają proces potomny w tle i zamykają coś podobnego
#example of non-blocking script
echo "START"
first_program &
second_program &
echo "DONE"
Co próbuję osiągnąć?
Skrypty dostarczone przez użytkownika mogą należeć do dowolnego z powyższych dwóch typów lub być kombinacją obu. Moim zadaniem jest uruchomienie skryptu i poczekanie, aż wszystkie procesy rozpoczęte przez niego zakończą się, a następnie zamkną węzeł. Jeśli jest typu blokującego, wielkość liter jest po prostu prosta, tzn. Uzyskaj PID procesu wykonywania skryptu i poczekaj, aż ps -ef | grep -ef PID nie będzie już zawierał żadnych wpisów. Skrypty nieblokujące powodują problemy
Czy istnieje sposób, aby uzyskać listę PID wszystkich procesów potomnych odradzanych przez wykonanie skryptu? Wszelkie wskazówki lub wskazówki będą mile widziane
grep
, po prostu ps –udummy_user
. Zobacz także grupy procesów.
ps
bez żadnych argumentów (powinno być tylko bash
i ps
na początku). Rozpocznij swój skrypt tam. Po zakończeniu poczekaj, aż ps | wc -l
osiągnie oczekiwaną wartość.
pid$(foo.sh; echo $!)
co da ci PIDfoo.sh
, abyś mógł z niego skorzystaćps --ppid
. Czy to będzie działało?