Grupa procesów to zbiór powiązanych procesów, które mogą być sygnalizowane jednocześnie.
Sesja jest zbiorem grup procesów, które są przyłączone do grupy jednego urządzenia końcowego (zwanej terminala sterującego ) przymocowanymi do każdego terminalu.
Sesje służą do sterowania zadaniami: jedna z grup procesów w sesji jest pierwszoplanową grupą procesów i można wysyłać sygnały za pomocą znaków sterujących terminala. Możesz myśleć o sesji z terminalem sterującym jako o „logowaniu” na tym terminalu. (Demony zwykle odłączają się od dowolnego kontrolującego terminala, tworząc nową sesję bez jednego).
np. jeśli uruchamiasz some_app
z powłoki, powłoka tworzy dla niej nową grupę procesów i czyni ją pierwszoplanową grupą procesów sesji. ( some_app
może utworzyć kilka procesów potomnych; domyślnie będą one częścią tej samej grupy procesów). Jeśli następnie naciśniesz ^Z
, some_app
grupa procesów zostanie zasygnalizowana, aby ją zatrzymać; a grupa procesów powłoki jest ponownie przełączana na grupę procesów pierwszego planu. Wtedy np. Ponownie bg %1
uruchomiłby some_app
grupę procesów, ale utrzymywałby ją w tle.
Standard POSIX.1-2008 jest dość czytelny (przynajmniej tak mi się wydaje!) - spójrz na definicje i odpowiednie sekcje rozdziału „Ogólny interfejs terminala” .
terminal
i sąterminal device
wspomniane w dokumencie to samo?Powłoki kontroli zadań cały czas manipulują sesjami lub grupami procesów. Możesz wysłać ten sam sygnał do wszystkich procesów w grupie procesów za pomocą pojedynczego wywołania
kill()
funkcji POSIX .Standard POSIX mówi:
Na przykład, gdy powłoka logowania kończy pracę, sygnał SIGHUP jest wysyłany do wszystkich programów w jej grupie procesów.
Kiedy manipulujesz programami na pierwszym planie lub w tle, używasz grup procesów.
Istnieją również terminale kontrolne, o które należy się martwić; sygnały generowane przez terminal sterujący mogą być wysyłane do wszystkich programów w grupie procesów.
źródło