Nie taki Unix straszny (5)

Unix jest to system wielozadaniowy - może być w nim równolegle wykonywanych kilka procesów.

Unix jest to system wielozadaniowy - może być w nim równolegle wykonywanych kilka procesów.

Gdy zechcemy zobaczyć jakie procesy sami uruchomiliśmy w danej sesji, musimy użyć polecenia ps, zobaczyć powinniśmy wówczas mniej więcej coś takiego:

PID TTY STAT TIME COMMAND

13156 ttyp08 R 00:29 ps

13024 ttyp08 S 01:24 csh

Jak można zauważyć każdy proces w systemie ma swój numer identyfikacyjny - PID. Pole COMMAND to nazwa procesu, TIME to oczywiście czas działania procesu, a STAT to stan w jakim się aktualnie proces znajduje: R (Runnig) to proces aktywny (działający), T (sTopped) to proces zatrzymany przez użytkownika, Z (Zombie) procesy, które zakończyły swe działanie, ale z jakiś powodów są jeszcze obecne w sytemie, P (Page wait) D (Disk wait) S (Sleeping) I (Idle) to procesy zawieszone z różnych powodów. W podanym przykładzie procesem aktywnym jest samo polecenie ps (właśnie wydane), a chwilowo uśpiony został Shell.

Zakres działania tego polecenia można cokolwiek zwiększyć, poprzez dodanie opcji, np.:

ps -e

Da nam to listę wszystkich procesów (everything) wykonywanych w danym momencie w systemie. To polecenie, wydane w tej postaci pozwoli nam, gdy stwierdzimy, że system działa wolniej niż zwykle, zobaczyć kto jest tego sprawcą (czyli kto uruchomił programy, które obciążyły w sposób istotny system). Gdy chcemy poznać jakie procesy uruchomił dany użytkownik, trzeba napisać:

ps -u identyfikator_użytkownika

Znając numer identyfikacyjny procesu (PID) możemy zakończyć jego działanie (czyli jak to się mówi, ubić lub ustrzelić go) stosując polecenie kill numer_procesu. Czasami może to nie odnieść skutku (gdy proces ma zbyt wysoki priorytet) i trzeba nasze polecenie wzmocnić pisząc:

kill -9 numer_procesu

Oczywiście, podobnie jak dla polecenia chmod, możemy zakończyć tylko te procesy, których jesteśmy właścicielem. Zabijanie procesów jest potrzebne także wtedy, gdy zawiesi się nam terminal. Nie wolno go resetować, tylko trzeba zalogować się na innym, wydając polecenie ps -u swój_identyfikator poznać numer zawieszonego procesu i ubić go. Zawieszony terminal winien się wówczas odblokować.

Z pojęciem procesu jest związany symbol '&' (ampersand). Dodanie go na końcu jakiegokolwiek polecenia powoduje wykonanie tegoż w tle, to jest, proces zacznie się wykonywać, ale nie będziemy musieli czekać aż skończy swoje działanie, by kontynuować pracę z systemem (można w ten sposób potraktować wszelkie programy, które nie wymagają interakcji z użytkownikiem, np. przy poszukiwaniu plików, gdy wyjście polecenia skierujemy do pliku). Gdy wprowadzimy tak zakończone polecenie system odpowie nam podając dwie liczby:

[numer kolejny zadania] numer_identyfikacyjny_procesu

Numer zadania to nasza lokalna numeracja wykonywanych zadań. Z pomocą polecenia fg (foreground) przenosimy wykonanie procesu na pierwszy plan, a używając bg do tła. Gdy wykonuje się jakieś polecenie (w pierwszym planie, czyli trybie bezpośrednim) możemy zatrzymać jego działanie kombinacją klawiszy CTRL Z. Znajdziemy się wówczas w Shellu i możemy albo umieścić je w tle pisząc bg % (nie musimy podawać numeru procesu bo jest to bieżące zadanie) lub wznowić jego działanie pisząc fg %. Polecenie jobs służy do przeglądu wszelkich wstrzymanych zadań.

Jednak, gdy chcemy istotnie efektywnie pracować, używając wielozadaniowości, musimy mieć system okienek, gdzie w osobnych oknach będziemy mogli uruchamiać odrębne programy.

Gdy mowa o Unixie i systemie okienek bez wątpienia automatycznie każdy pomyśli o napisanym na słynnym Massachusetts Institute of Technology systemie

W celu komercyjnej reprodukcji treści Computerworld należy zakupić licencję. Skontaktuj się z naszym partnerem, YGS Group, pod adresem [email protected]

TOP 200