9. KOORDYNACJA PROCESÓW WSPÓŁBIEŻNYCH PRZY UŻYCIU
INTERPRETATORA
KOMEND SYSTEMU UNIX
Podstawowe parametry procesu unixowego:
- identyfikator procesu PID
(Process ID)
- identyfikator procesu rodzicielskiego PPID
(Parent Process ID)
- rzeczywisty identyfikator użytkownika UID
(User ID)
- efektywny identyfikator użytkownika EUID
(Effective User ID)
- rzeczywisty identyfikator grupy użytkowników GID
(Group ID)
- efektywny identyfikator grupy użytkowników EGID
(Effective Group ID)
- identyfikator grupy procesów PGRP
(Process Group)
- wskaźnik do struktury terminala. Terminal ten nazywamy terminalem
sterującym dla danego
procesu.
Proces może nie mieć terminala sterującego - w takim przypadku wskaźnik do
struktury terminala
ma wartość NULL.
Struktura terminala zawiera między innymi bieżący identyfikator grupy
terminala
(Current
Terminal Process Group)
- nie ma ustalonego skrótu, na potrzeby wykładu
przyjmijmy CTPGRP.
Proces interpretatora komend, który zostaje uruchomiony w wyniku zalogowania się
do systemu,
nazywany jest shellem zgłoszonym. Na początku pracy jest procesem
sterującym terminala,
z którego nastąpiło zalogowanie, czyli przywódcą grupy terminala (zachodzi dla
niego
PID = PGRP = CTPGRP).
Proces nazywamy pierwszoplanowym
(foreground process)
, jeżeli jego PGRP jest
równy CTPGRP
wskazywanego przez niego terminala. W przeciwnym przypadku proces nazywamy
drugoplanowym,
lub wykonującym się w tle
(background process)
. Procesy pierwszoplanowe mogą
odczytywać znaki
z terminala i zapisywać znaki do terminala (to jest pliku specjalnego
odpowiadającego terminalowi).
Procesy drugoplanowe nie mogą odczytywać znaków z terminala (są zawieszane
przy próbie czytania),
natomiast zazwyczaj mogą zapisywać znaki do terminala (jest to zależne od systemu
i aktualnych
ustawień w strukturze terminala).
Uwaga. Zazwyczaj w każdej chwili istnieje dokładnie jeden proces pierwszoplanowy
terminala.
Pojedynczą komendę lub pojedynczy potok komend uruchomiony z linii poleceń
shella nazywamy
pracą
(job)
. Shell ma własność sterowania pracami
(job control)
, jeżeli
posiada możliwość zmiany
CTPGRP terminala, z którego został uruchomiony.
Polecenia:
komenda - uruchamia proces pierwszoplanowy;
komenda & - uruchamia proces drugoplanowy
(komenda &) - uruchamia proces drugoplanowy korzystając z
podshella
Ctrl-Z - zawiesza proces pierwszoplanowy
Ctrl-Y - zawiesza proces pierwszoplanowy w chwili
rozpoczęcia czytania
bg praca (lub praca &) - uruchamia zawieszony proces w tle
fg praca (lub praca ) - uruchamia zawieszony proces na pierwszym
planie
kill -9 praca - powoduje zakończenie procesu (działającego lub
zawieszonego)
Uwaga. Można uruchomić kilka procesów jednocześnie z jednej linii poleceń
(pisząc na przykład
komenda1 & komenda2 & ).
Proste mechanizmy koordynacji procesów w shellu:
1) polecenia exit i wait
exit liczba - kończy działanie procesu i przesyła jednobajtową liczbę
(kod wyjścia)
do jego procesu rodzicielskiego
wait praca - powoduje zawieszenie procesu w oczekiwaniu na
zakończenie jego procesu
potomnego i odbiera jego kod wyjścia
2) polecenia kill i trap
kill sygnał praca - powoduje wysłanie sygnału do procesu (z tej samej
grupy)
trap komenda sygnał - powoduje przechwycenie przysłanego sygnału (jeśli
to możliwe)
i wykonanie komendy
3) łącza nienazwane (bezimienne)
komenda1 | komenda2 | ... | komendan - potok
(może być utworzony przy założeniu, że komendy korzystają ze standardowego
wejścia/wyjścia)
4) łącza nazwane (kolejki FIFO)
mkfifo nazwa (lub mknod nazwa p) - tworzy kolejkę FIFO
Zapis/odczyt oraz usunięcie odbywają się dla kolejki FIFO tak samo, jak dla
zwykłego pliku
(mogą to robić wszystkie procesy, które mają odpowiednie prawa dostępu do
kolejki). Musi
zachodzić synchronizacja operacji zapisu i odczytu.
Uwaga.
1) Łącza są realizowane jako bufory plików i mają ograniczoną pojemność. Mogą
być widziane jako
„pliki nietrwałe” - odczyt porcji informacji z łącza usuwa ją jednocześnie z
łącza.
2) Łącza nazwane są uwidocznione w systemie plików jako szczególny rodzaj
plików (o wielkośći 0).
Łącza nienazwane nie są uwidocznione (istnieją tylko w czasie wykonywania
potoku).