C Użycie funkcji setpgid

C Użycie funkcji setpgid
Za każdym razem, gdy wprowadzamy polecenie Shell, w sesji rozpoczyna się nowy proces. Następnie system przypisuje identyfikator procesu (PID) i identyfikator grupy procesowej (PGID). PID wskazuje identyfikator procesu, podczas gdy PGID opisuje identyfikator grupy procesu dowolnego zadania obecnie wykonywanego przez system lub nadal w toku. SetPgid () jest funkcją istotną dla tego. Jak sama nazwa wskazuje, jest ona używana albo do dodania do istniejącej grupy procesowej, albo, w innym przypadku, do utworzenia nowej grupy procesów w tej samej sesji procesu wywołania. Identyfikator grupy dla procesu lidera sesji jest zawsze taki sam. To nie zostało zmienione.

Ta funkcja służy do ustawiania PGID (identyfikator grupy procesu) wewnątrz sesji procesu wywołania, abyśmy mogli przypisać lub przenosić proces do różnych grup procesów. Aby rozpocząć nową grupę procesów z dowolnym konkretnym procesem jako lider grupy, funkcja ta pomaga również w tym aspekcie. W tym artykule podkreśla tworzenie i działanie funkcji setPgid ().

Opis

Identyfikator procesu jest identyfikatorem, który istnieje w sesji procesu wywołania. To identyfikator, którego PGID chcemy zmienić. Może to być dzwoniący setpgid (), albo może być jego dziećmi. PID nie może być liderem sesji, który ma zostać zmieniony.

Z drugiej strony PGID to nowy identyfikator, który chcemy przypisać do tego konkretnego procesu określonego przez PID. Jeśli PGID wskazuje na istniejącą grupę procesów, musi być obecny w sesji dzwoniącego. Nowa grupa jest również tworzona w sesji dzwoniącego.

Składnia

#włączać
int setpgid (PID_T, PGID);

Funkcja setpgid () jest obecna w polu bibliotecznym. I jest to zawarte w dlatego używamy tej biblioteki tutaj. W części parametrów funkcji zapisane są zarówno IDS (PID, PGID). Oba należą do identyfikatora procesu, który chcemy ustawić lub do tego, który chcemy dołączyć lub stworzyć.

Fakty i funkcje funkcji setPgid ()

Jak omówiono wcześniej, setpgid () ustawia identyfikator grupy procesu, który PID określa identyfikator grupy procesu. Czasami istnieje jakieś okoliczności, w których wszystkie grupy procesów leżą w tej samej sesji. Dzieje się tak, gdy jeden proces jest pobierany z jednej grupy do drugiej za pośrednictwem SetPgid (). W tej sytuacji PGID określa istniejącą grupę procesów i dołącza do niej.

GetPgid () to funkcja taka jak setpgid (). Składnia dla obu procesów jest taka sama, w tym wywołania funkcji. Podobnie jak obie te funkcje, getPGrp () i getPgid (0) w ten sam sposób są ze sobą równoważne.

Zastosowania grup procesowych

Grupy procesowe pracują nad rozpowszechnieniem sygnałów w celu przekazania i przypisywania żądań wprowadzania. Procesy posiadające te same grupy procesów są na pierwszym planie i mogą być odczytane, podczas gdy pozostałe procesy zostaną zablokowane sygnałem, jeśli będą próbowane odczytać.

Wartość zwracana

Gdy wywołanie funkcji jest pomyślnie wykonane, a proces jest wykonywany, setPgid () i setPGrp () zwracają zero, gdy wystąpi błąd, a funkcja zwraca -1. Po przekazaniu tego sygnału błędu. GetPgid () i getPgrp () są powiązane z setPgid (). Więc getPgid () zwraca grupę procesów, gdy jest to pomyślnie wykonane. W przypadku błędu daje -1. Podczas gdy funkcja getPGRP () zawsze podaje grupie procesów obecnie używaną.

W celu wdrożenia niektórych przykładów użyj w tym aspekcie edytora tekstu i terminalu Linux. Napiszemy kod w edytorach tekstu, a następnie wyświetlimy wynik w terminalu Linux.

Przykład 1

Po pierwsze, użyjemy tej samej biblioteki opisanej powyżej w przewodniku, co jest niezbędne do wykonywania kodu.

#włączać

W programie głównym typ powrotu jest traktowany jako liczba całkowita. Nie jest nieważne, ponieważ funkcja zwróci wartość w postaci liczby całkowitej jako identyfikatorów procesu. Używamy if-zastępcy, ponieważ musimy zastosować sprawdzenie błędu. Pierwszy wiersz w instrukcji wywołuje setpgid () z argumentem innej funkcji getPid (). Ta funkcja otrzyma identyfikator, który chcemy ustawić. Jeśli zwrócona wartość wynosi „-1”, oznacza to, że wystąpił błąd, aby proces został zakończony.

If (setPgid (getPId (), 0) == -1)

To ponownie wywoła tę samą funkcję SETPGID, aby zresetować domyślny identyfikator procesu. Ale jeśli warunek jest prawdziwy, oznacza, że ​​zwrócona wartość wynosi 0, to zarówno funkcja wywołuje identyfikator procesu getpid (), jak i grupy identyfikator procesu getPGRP () jest wywoływany.

Zapisz plik z rozszerzeniem C i zobacz wyjście przejdź do terminalu Linux; Kod źródłowy zostanie skompilowany, a następnie wykonany za pośrednictwem kompilatora GCC. Używany jest plik wejściowy, który jest kodem źródłowym, a plik służy do wyświetlania wyjścia. 'plik. C 'to nazwa pliku.

Plik pliku $ gcc -o.C
$./plik

Kod jest pomyślnie wykonywany podczas uruchamiania kodu, a identyfikator procesu i identyfikatory grup procesowych są uzyskiwane. Oba identyfikatory są takie same, co oznacza, że ​​oba leżą w tej samej sesji. Za każdym razem, gdy wykonasz kod, wynikowe identyfikatory będą inne.

Przykład 2

Tutaj użyjemy Fork () w kodzie źródłowym. Ponieważ funkcja Fork () jest używana do tworzenia nowego procesu, proces dziecka i ten proces dziecięcy działa jednocześnie z procesem nadrzędnym. Jest to kolejna metoda ustawiania identyfikatora i identyfikatorów grupy nowo utworzonych procesów. Najpierw musimy zainicjować zmienną, aby sprawdzić, czy błąd istnieje, czy nie. Jeśli istnieje, wówczas przekazywany jest sygnał błędu. A w części elastycznej funkcja widelca jest wywoływana. Jeśli identyfikator procesu jest równy powraca widelc 0, oznacza to, że tworzenie nowego procesu jest tworzone.

If ((pid = widelec ()) == 0)

Wszystkie identyfikatory grupy dziecka zostaną wyświetlone przed oczekiwaniem i po nim. Podobnie wyświetlane zostaną identyfikatory procesów nadrzędnych; Są one uzyskiwane za pośrednictwem funkcji getpid (). Ostatecznie funkcja setPGID () zostanie wywołana, jeśli nie jest zerowa, wówczas błąd zostanie przekazany.

Teraz zobaczymy wynik. Wszystkie identyfikatory procesów i identyfikatory grup procesowych zostaną wyświetlone. Za pomocą Fork () identyfikatory rodzic-dziecko są wyświetlane osobno. Po pierwsze, zarówno identyfikator procesu dla rodziców, jak i dzieci jest wyświetlany przed oczekiwaniem, a potem po nim.

Wniosek

Artykuł „C: Użycie funkcji setPGID” to artykuł zawierający podstawowy opis funkcjonalności setPGID () oraz tworzenie identyfikatora procesu i identyfikatora procesu i użycia grupy. Niektóre błędy są powodem zatrzymania procesu, mogą być błędy wyszukiwania, które nie znajdują żadnego istniejącego identyfikatora, wówczas identyfikator procesu bieżącego procesu jest przypisywany automatycznie. Mamy nadzieję, że ten wysiłek pomoże ci w twoich warunkach pracy w języku programowania C.