Zrozumiałem, że: 1) waitpid służy do czekania na śmierć dziecka, a następnie odbiera SIGCHLD i status wyjścia dziecka itp. 2) Kiedy mamy obsługę sygnału dla SIGCHLD, robimy jeszcze więcej rzeczy związane z oczyszczaniem dziecka lub innych rzeczy (do programisty), a następnie zrobić waitpid, aby dziecko nie poszło zombie, a następnie powrócić.Używanie waitpid lub sigaction?
Czy potrzebujemy mieć zarówno 1, jak i 2 w naszych programach, gdy wykonujemy fork/exec i dziecko wraca? Jeśli mamy Zarówno SIGCHLD uzyskuje pierwszy, więc procedura obsługi sygnału nazywa się pierwszy, a tym samym jego waitpid nazywa się powodzeniem i nie waitpid w kodzie procesu nadrzędnego następująco:
my_signal_handler_for_sigchld
{
do something
tmp = waitpid(-1,NULL,0);
print tmp (which is the correct value of the child pid)
}
int main()
{
sigaction(SIGCHLD, my_signal_handler_for_sigchld)
fork()
if (child) //do something, return
if parent // waitpid(child_pid, NULL,0); print value returned from this waitpid - it is -1
}
wdzięczny jeśli ktoś mi pomoże zrozum to.
Witam, dziękuję za odpowiedź.Ale czego tak naprawdę szukałem, to: Kiedy mam zarówno sig_handler i waitpid w procesie nadrzędnym, sig_handler jest nazywany becaues of sigchld, a następnie drugi waitpid, jak pokazano powyżej w moim Question zwraca -1. Czy mogę po prostu usunąć drugi waitpid, który mam? – Vin
Tak, można tylko z powodzeniem oczekiwać na dany proces potomny tylko jeden raz. Naprawdę błąd to czekać ponownie, ponieważ pid jest "uwolniony" przez pierwsze oczekiwanie i mógł zostać użyty ponownie do nowego procesu potomnego (jeśli zdarzyło Ci się stworzyć inny). –
@R .. Czy moglibyśmy wyjaśnić "Kiedy proces potomny zostanie zakończony, jego koniec rury zostanie nieco zamknięty?" Aby być naprawdę dokładnym, nie byłoby "Kiedy proces potomny zamyka swoją FD, która jest połączona z końcem rury, i nie ma innych procesów mających przyłączenia FD do tego końca rury, wtedy drugi koniec rury będzie sygnalizowane jako zamknięte (otrzymuje EOF) '? Wierzę, że to wyjaśniałoby dokładniej, co się dzieje, a także ważny szczególny przypadek tego, co się dzieje, gdy więcej niż 2 procesy z FD do rury otwarte. – nh2