Waitpid Syscall w C

Waitpid Syscall w C

WaitPid () System monitory połączeń Dziecko osoby dzwoniącego dla zmian państwowych i odzyskuje informacje o dziecku, którego zachowanie się zmieniło. Dziecko zostało zatrzymane przez sygnał lub wznowiony przez sygnał uważany za przesunięcie stanu. Czekanie na zakończone dziecko umożliwia systemowi zwolnienie zasobów związanych z dzieckiem; Jeśli nie zostanie przeprowadzone oczekiwanie, zakończone dziecko pozostanie w „bałwan" stan.

Funkcja systemu WaitPid () Zatrzymuje bieżący proces, dopóki argument PID nie określi dziecka, które się zmieniło. Proces połączenia jest zatrzymywany do momentu zakończenia procesu dziecka lub zakończenia. WaitPid () zatrzymuje proces połączenia, aż system otrzyma informacje o statusie dziecka. WaitPid () zwraca się szybko, jeśli system ma już informacje o statusie odpowiedniego dziecka, gdy jest wywoływane. Jeśli proces dzwoniącego otrzyma sygnał z działaniem wykonywania modułu obsługi sygnału lub zakończeniem procesu, WaitPid () jest zakończony. Funkcja WaitPid () Zatrzyma wykonanie wątku dzwoniącego, dopóki nie otrzyma informacji i aktualizacji dla jednego z zakończonych procesów dziecięcych lub sygnału, który albo uruchomi procedurę chwytania sygnału lub zakończy proces.

Przykład 1

Będziemy rozwinąć nasz pierwszy przykład w terminalu Ubuntu 20.04 System operacyjny. Utwórz plik z poleceniem Nano w konsoli, jak ujawniono poniżej. Wybór nazwy pliku zależy całkowicie.

$ nano czekaj.C

Możesz sprawdzić, czy plik pojawił się w Redaktor GNU Nano. Po prostu umieść kod pokazany na załączonym obrazie.

W tym przykładzie użyliśmy pętli do zwiększania procesu. Fork () System Call był użyty. Fork () System Call służy do rozpoczęcia nowego procesu, znanego jako proces potomny, który działa równolegle z tym, który stworzył Fork () zadzwoń do procesu nadrzędnego. Po Fork () System Call tworzy nowy proces dzieci, wszystkie procesy wykonają następną instrukcję. Nie przyjmuje żadnych danych wejściowych i zwraca wartość liczb całkowitą. Następnie zastosowano funkcję snu.

Funkcja sleep () zawiesza działanie wątku wywoławczego, aż zakres sekund w czasie rzeczywistym dostarczonym przez parametr sekund, lub sygnał zostanie podany do wątku wywołującego z działaniem wywoływania funkcji chwytania sygnału lub zakończenia proces. Dodaliśmy „1” jako argument. Żona sprawdza status rozwiązania dziecka zwróconego przez oczekiwanie i metody WaitPid () Aby sprawdzić, czy proces dziecka został pomyślnie zakończony.

W głównej funkcji tego programu, Wait () System Call został nazwany. Gdy zrozumiesz ten kod, zapisz i wyjdź z pliku i wróć do terminala. Napisz poniżej podlegających instrukcji wykonania kodu. Użyliśmy Kompilator GCC w Ubuntu 20.04 system operacyjny.

$ GCC czekaj.C
$ ./A.na zewnątrz

Wyjście można zobaczyć na załączonym obrazie.

Przykład 2

Będziemy rozwinąć nasz drugi przykład w terminalu Ubuntu 20.04 System operacyjny. Utwórz plik z polecenie nano w konsoli, jak przedstawiono poniżej. Wybór nazwy pliku zależy całkowicie.

$ Nano Waitpid.C

Możesz sprawdzić, czy plik pojawił się w Redaktor GNU Nano. Po prostu umieść kod pokazany na załączonym obrazie.

W wyżej wymieniony kod ponownie, znowu, Fork () System Call był użyty. Cel Fork () System Call ma rozpocząć nowy proces, znany jako proces dziecięcy, który działa równolegle z tym, który stworzył Fork () zadzwoń do procesu nadrzędnego. Po Fork () System Call tworzy nowy proces dzieci, wszystkie procesy wykonają następną instrukcję. Nie przyjmuje żadnych danych wejściowych i zwraca wartość liczb całkowitą. Exit_failure oznacza nieskuteczne wdrożenie programu. Pause () funkcja czeka na sygnały.

Jeśli dziecko zatrzymało się, ale nie zostało prześledzone za pomocą ptrace () wywołanie systemowe, Wuntraced wróci. Chociaż ten parametr nie jest wybrany, dostarczany jest status prześledzonych dzieci, które zatrzymały się. Wcontinued powrót, jeśli zatrzymane dziecko zostało ponownie uruchomione przez Sigcont Transmis. Wexitstatus (status) zapewnia status wyjścia dziecka. Jeśli Żona Zwraca prawda, to wyrażenie należy użyć tylko. Częstotliwość sygnału, która skłoniła proces dziecka do zakończenia Wtertermsig (status). Jeśli Wifsignaled dało „prawdziwe”, to wyrażenie powinno być użyte tylko.

Numer sygnału, który skłoniła dziecko do zatrzymania, jest zwracany przez WStopsig (status). Jeśli Wifstoped Zwraca prawda, to wyrażenie należy użyć tylko. Wifsignaled (status) zwraca prawdziwie, jeśli sygnał zakończył proces dziecka. Gdy zrozumiesz ten kod, zapisz i wyjdź z pliku i wróć do terminala. Napisz poniżej podlegających instrukcji wykonania kodu. Użyliśmy kompilatora GCC w Ubuntu 20.04 System operacyjny.

$ GCC Waitpid.C
$ ./A.na zewnątrz

Wyjście można zobaczyć na załączonym obrazie.

Wniosek

Ten przewodnik polegał na wykorzystaniu WaitPid () System wywołania w programowaniu C. Ogłosiliśmy dwa przykłady. Jeden z nich jest prostszy i łatwy. Po zrozumieniu możesz łatwo przejść do złożonego. Wykonaj oba przykłady w swoim systemie, aby ułatwić Ci korzystanie WaitPid () System wywołania w programowaniu C.