34, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta


Rozdział 34.
Procesy


Tim Parker

W tym rozdziale:

Każdy program działający w systemie linuxowym - uruchomiony przez użytkownika, przez systemu, czy też program rezydentny - jest procesem. Umiejętność zarządzania procesami jest dla administratora bardzo istotna (czasem nawet nieodzowna). W tym rozdziale przyjrzymy się bliżej temu problemowi. Nie będziemy oczywiście omawiać szczegółów technicznych przydzielania poszczególnym procesom czasu procesora czy pamięci operacyjnej. Omówimy jednak najważniejsze - z punktu widzenia administratora - zagadnienia, których znajomość jest niezbędna do zapewnienia bezawaryjnej pracy systemu.

Przy opisie systemów wielozadaniowych często używa się pojęć proces i zadanie. Często mogą być one używane zamiennie, ale przez zadanie przeważnie rozumie się proces uruchomiony przez interpreter poleceń (który może również zatrudniać inne procesy). Proces jest najmniejszą niepodzielną częścią programu, działającą w systemie Linux. --> [Author:ts]

Co trzeba wiedzieć o procesach

Formalna definicja procesu brzmi: proces to program, który posiada własną wirtualną przestrzeń adresową. Oznacza to, że każdy program działający w systemie linuxowym jest procesem. Pojedyncze polecenie może uruchamiać wiele różnych procesów, szczególnie jeśli użyty zostanie mechanizm przekierowania czy potoków (ang. pipe). Poniższe polecenie powoduje uruchomienie trzech procesów, po jednym dla każdego wywoływanego programu:

nroff -man ps.1 | grep kill | more

Typy procesów

W systemie Linux rozróżniane są trzy rodzaje procesów, posiadające nieco inne cechy i atrybuty. Są to:

Użycie polecenia ps

Najprostszym sposobem na sprawdzenie, jakie procesy działają aktualnie w systemie, jest użycie polecenia ps (ang. process status). Udostępnia ono sporo różnego typu opcji, ale tylko kilka z nich wykorzystuje się w praktyce. Rozpoczniemy od przedstawienia najbardziej podstawowych informacji o tym poleceniu, a następnie omówimy niektóre z jego opcji.

Polecenie ps jest dostępne dla wszystkich użytkowników systemu, ale dla użytkownika root wyniki jego działania mogą być nieco inne niż dla zwykłego użytkownika.

Jeśli jesteś zalogowany jako zwyczajny użytkownik (tj. nie jako root) i wydasz polecenie ps, wyświetlone zostaną informacje o wszystkich procesach, których jesteś właścicielem. Możesz na przykład zobaczyć następujące dane:

$ ps
PID TTY STAT TIME COMMAND
229 2 S 0:00 /bin/login -- reksio
257 2 S 0:00 -bash
269 2 R 0:00 ps

Dane wyświetlane przez program ps

Dane wyświetlane przez program ps zawsze podawane są w kolumnach. Pierwsza kolumna ma nagłówek PID (ang. Process ID) i zawiera identyfikator procesu. Każdemu procesowi działającemu w systemie przypisany jest niepowtarzalny numer, dzięki któremu Linux może odróżnić go od innych procesów. Numerowanie procesów rozpoczyna się od zera po uruchomieniu Linuxa, a maksymalna dopuszczalna wartość zależy od systemu (często jest to 65535). Po przekroczeniu wartości maksymalnej numerowanie znów zaczyna się od zera, z pominięciem tych numerów, które zostały przydzielone wciąż aktywnym procesom. Zwykle najniższe numery przydzielone są procesom wchodzącym w skład jądra systemu i programom rezydentnym (demonom), uruchamianym podczas startu systemu. Jeśli chcesz zrobić cokolwiek z procesem (na przykład zakończyć jego działanie), musisz znać jego identyfikator.

Kolumna opisana jako TTY zawiera informację o tym, z której konsoli dany proces został uruchomiony. Jeśli jesteś zalogowany jako zwykły użytkownik, będzie to nazwa Twojego terminalu lub konsoli. Jeżeli jesteś zalogowany na kilku konsolach, zobaczysz dane o procesach uruchomionych na wszystkich konsolach.

W kolumnie STAT znajduje się informacja o bieżącym stanie procesu. Najczęściej pojawiają się tu litery S (ang. sleeping - proces uśpiony) i R (ang. running - aktywny). Stan procesu może zmieniać się z uśpionego na aktywny i odwrotnie wiele razy w ciągu sekundy.

Kolumna TIME zawiera całkowitą ilość czasu procesora użytego przez proces do tej pory. Zwykle jest to wartość bardzo mała (większość procesów wykonuje się dość szybko). Jest to czas, przez jaki proces miał dostęp do procesora, a nie czas, który upłynął od momentu jego uruchomienia.

Ostatnia kolumna - COMMAND - zawiera polecenie, za pomocą którego proces został uruchomiony. Przeważnie jest to polecenie wpisane przez użytkownika z klawiatury terminalu, jednak ps na równych prawach traktuje też procesy wywołane przez inne procesy (nazywane procesami potomnymi - ang. child processes).

Interpretery poleceń uruchamiane przy logowaniu

Aby pomóc Ci odróżnić interpreter, który został uruchomiony podczas logowania, od pozostałych (uruchomionych później), jego nazwa poprzedzona jest myślnikiem, na przykład tak:

$ ps
PID TTY STAT TIME COMMAND
46 v01 S 0:01 -bash
75 v01 S 0:00 pdksh
96 v01 R 0:00 bash
123 v01 R 0:00 ps

W powyższym przykładzie widać, że interpreter poleceń o identyfikatorze 46 uruchomiony został przy logowaniu, natomiast inne interpretery (o identyfikatorach 75 i 96) zostały uruchomione później.

Zauważ, że na liście procesów zawsze znajduje się polecenie ps; jest to oczywiste, jeśli wziąć pod uwagę fakt, że polecenie to było uruchomione w trakcie swojego działania.

Uwagi dla użytkownika root

Kiedy zwykły użytkownik wydaje polecenie ps, uzyskuje listę własnych procesów. Jeśli jesteś zalogowany jako root, zobaczysz w takiej sytuacji listę wszystkich procesów w systemie, ponieważ root jest właścicielem ich wszystkich. Lista taka może być bardzo długa, szczególnie w systemach, w których pracuje jednocześnie kilku użytkowników. Powinieneś więc skierować ją do pliku albo na wejście polecenia more lub less, na przykład za pomocą jednego z poleceń:

ps | more
ps > /tmp/ps_out

Przydatne opcje programu ps

Po dołączeniu do polecenia ps opcji u uzyskujemy kilka nowych informacji. Oto wynik wykonania takiego polecenia przez zwykłego użytkownika:

$ ps u
USER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMAND
bill 281 0.2 3.0 1492 948 2 S 18:25 0:00 /bin/login -- *bill
bill 284 0.2 2.4 1180 768 2 S 18:26 0:00 -bash
bill 298 0.0 1.5 856 488 2 R 18:26 0:00 ps u

Najważniejsza nowość to kolumna USER, która pokazuje, kto uruchomił i posiada dany proces. Zamiast numerycznego identyfikatora użytkownika wyświetlany jest odpowiadający mu identyfikator tekstowy, odszukany przez polecenie ps w pliku /etc/passwd.

Opcja u powoduje również wyświetlenie kolumn zawierających dane o procentowym zużyciu czasu procesora (kolumna %CPU) i pamięci (kolumna %MEM). Dane te mogą być użyteczne w przypadku, gdy z nieznanych bliżej powodów system zwolni działanie. Można wówczas odszukać „winowajcę” (w języku angielskim procesy konsumujące nadmierne ilości zasobów zwane są „memory hogs” i „CPU hogs”) i sprawdzić, czy przypadkiem nie jest to proces, który wymknął się spod kontroli i pochłania zasoby systemowe.

Kiedy wydasz polecenie ps u, będąc zalogowany jako root, zobaczysz listę wszystkich procesów działających w systemie. Podobnie jak poprzednio, może zajść konieczność przesłania wyników polecenia do pliku lub na wejście programu more. W niektórych wersjach Linuxa po opcji u można również podać identyfikator użytkownika, co spowoduje wyświetlenie tylko procesów do niego należących, na przykład:

ps u bill

Ta składnia polecenia ps jest dozwolona w wersjach dostarczanych wraz z System V, ale nie działa w większości rozprowadzanych z Linuxem wersji programu ps opartych o BSD (w tym w wersji dostępnej na załączonym do książki dysku CD). Inne wersje tego polecenia dostępne są w węzłach FTP i BBS. Większość użytkowników może również użyć opcji u aby zobaczyć listę procesów uruchomionych przez innych użytkowników. Dzięki temu można sprawdzić, kto uruchamia procesy pochłaniające najwięcej zasobów, a administrator może łatwo zorientować się, jakie procesy uruchamiał użytkownik zgłaszający problemy z systemem.

Zwykły użytkownik może również zobaczyć listę wszystkich procesów działających w systemie (a nie tylko procesów uruchomionych przez siebie), używając opcji a (jeśli zastosujesz tę opcję, gdy jesteś zalogowany jako root, wyświetlana lista oczywiście nie zmieni się). Oto przykładowy wynik działania polecenia ps a wydanego przez zwykłego użytkownika:

$ ps a
PID TTY STAT TIME COMMAND
228 1 S 0:00 /bin/login -- root
230 3 S 0:00 /sbin/mingetty tty3
231 4 S 0:00 /sbin/mingetty tty4
232 5 S 0:00 /sbin/mingetty tty5
233 6 S 0:00 /sbin/mingetty tty6
236 1 S 0:00 -bash
248 1 S 0:12 /usr/bin/mc -P
250 p0 S 0:00 bash -rcfile .bashrc
281 2 S 0:00 /bin/login -- bill
284 2 S 0:00 -bash
300 2 R 0:00 ps a

Tak krótki wydruk pochodzi z systemu, w którym w zasadzie nic się nie dzieje. Większość pozycji opisuje procesy systemowe. W powyższym przypadku nie można określić, kto uruchomił dany proces - ale można połączyć opcje a oraz u:

$ ps au
USER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMAND
bill 281 0.1 3.0 1492 948 2 S 18:25 0:00 /bin/login -- *bill
bill 284 0.1 2.4 1180 768 2 S 18:26 0:00 -bash
bill 302 0.0 1.5 856 492 2 R 18:27 0:00 ps au
root 228 0.0 3.0 1496 952 1 S 18:18 0:00 /bin/login -- *root
root 230 0.0 1.0 740 316 3 S 18:18 0:00 /sbin/mingetty *tty3
root 231 0.0 1.0 740 316 4 S 18:18 0:00 /sbin/mingetty *tty4
root 232 0.0 1.0 740 316 5 S 18:18 0:00 /sbin/mingetty *tty5
root 233 0.0 1.0 740 316 6 S 18:18 0:00 /sbin/mingetty *tty6
root 236 0.0 2.5 1184 772 1 S 18:19 0:00 -bash
root 248 2.5 4.4 2456 1372 1 S 18:19 0:12 /usr/bin/mc -P
root 250 0.0 2.5 1188 772 p0 S 18:19 0:00 bash -rcfile *.bashrc

Wyświetlane są kolumny zawierające te same informacje, jak w przypadku użycia opcji u, ale dotyczące wszystkich działających procesów. Porządek, w jakim podane zostaną opcje, nie jest istotny.

Opcja l pozwala na uzyskanie informacji o tym, przez jaki proces dany proces został uruchomiony:

$ ps l
FLAGS UID PID PPID PRI NI SIZE RSS WCHAN STA TTY TIME COMMAND
100100 501 281 1 0 0 1492 948 wait4 S 2 0:00
* /bin/login -- bill
501 284 281 9 0 1180 768 wait4 S 2 0:00 -bash
100000 501 304 284 10 0 968 504 R 2 0:00 ps -l

Kolumna PPID (ang. Parent Process ID) zawiera identyfikator procesu, który uruchomił dany proces. Jak widać, program ps uruchomiony został przez powłokę bash, która z kolei została uruchomiona przez proces o numerze 1 - czyli proces init, który jest „matką” wszystkich innych procesów (jeśli zastanawiasz się, jakie ma to konsekwencje - odpowiedź jest prosta: jeśli ten proces zakończy działanie, przestaną działać wszystkie inne procesy).

0x01 graphic

Wydając polecenie ps można, ale nie trzeba używać myślnika przed nazwami opcji.

Uwagi dla administratorów

W większości przypadków trzy przedstawione wcześniej wersje polecenia ps dostarczają wszystkich potrzebnych informacji. Jeśli potrzebne są dane o systemie jako całości, wystarczy wydać polecenia:

ps -ax
ps -aux
ps -le

Na ekranie otrzymasz wszystkie chyba dostępne w systemie informacje o procesach. Dokładniejsze dane o działaniu polecenia ps możesz znaleźć na stronach man (które w tym przypadku nie są - niestety - kompletne).

Polecenie kill

Od czasu do czasu zdarza się proces, który zawiesi terminal albo po prostu nic nie robi. Zwykle sytuacja taka jest wynikiem błędów tkwiących w różnych programach. W obu przypadkach jedyną drogą usunięcia takiego procesu jest wydanie polecenia kill.

0x01 graphic

Kiedy kończysz działanie procesu, a jesteś zalogowany jako root, zwróć szczególną uwagę na numer procesu, który zamierzasz usunąć, żeby przypadkiem nie popełnić mogącej mieć przykre skutki pomyłki. Nie powinieneś usuwać procesów systemowych, chyba że dokładnie wiesz, co chcesz przez to osiągnąć.

Aby użyć polecenia kill, musisz mieć dostęp do okna lub konsoli, w którym będziesz mógł wydawać polecenia. Jeśli terminal zawiesił się kompletnie - musisz znaleźć inny. Jako zwykły użytkownik możesz usuwać tylko własne procesy. Jako użytkownik root możesz manipulować wszystkimi procesami.

Musisz również znać identyfikator procesu, który chcesz usunąć (polecenie kill służy również do wysyłania innych sygnałów do procesów, nie tylko do ich usuwania - przyp. tłum.). Jest on wyświetlany przez polecenie ps. Poniżej podano przykład, w którym proces o nazwie bad_prog i identyfikatorze 292 nie zakończył się prawidłowo, w związku z czym trzeba go usunąć.

$ ps u
USER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMAND
walter 281 0.2 3.0 1245 467 2 S 13:25 0:00 -bash
walter 292 9.2 12.0 2134 467 2 R 15:51 2:01 bad_prog
*$ kill 292

Polecenie kill nie wyświetla informacji potwierdzającej usunięcie procesu. Aby sprawdzić, czy wszystko przebiegło poprawnie, trzeba ponownie wydać polecenie ps.

Usuwanie procesów potomnych

Jeśli proces, który chcesz usunąć, podczas swojego działania uruchomił inne procesy, powinieneś usunąć również wszystkie procesy potomne. Czasem zdarza się, że usunięty proces „odradza” się po chwili - w takim przypadku usunąć należy proces, który go wywołuje (jego identyfikator można znaleźć w kolumnie PPID po wydaniu polecenia ps l).

Jeśli pomimo wydania polecenia kill proces nadal działa, trzeba użyć mocniejszych argumentów. Polecenie kill udostępnia kilka poziomów działania. Wydane tylko z jednym argumentem - numerem procesu - próbuje grzecznie zakończyć proces, tzn. zamknąć otwarte pliki, zwolnić pamięć itd. Jeśli to nie pomaga, należy użyć opcji -9, która wymusza zakończenie procesu, na przykład tak:

kill -9 726

Jeśli nie działa nawet polecenie kill -9, możliwe, że masz do czynienia z jednym z „nieśmiertelnych” procesów. Jedynym sposobem na zakończenie działania takiego stworzenia jest ponowne uruchomienie systemu.

Co można, a czego nie można usunąć

Generalnie nie możesz usunąć procesu nie należącego do Ciebie. Przy próbie zrobienia czegoś takiego otrzymasz komunikat:

kill: - Not owner

Oczywiście użytkownik root może usunąć każdy proces.

Podsumowanie

W tym rozdziale pokazaliśmy, w jaki sposób można uzyskać informacje o procesach działających w systemie oraz jak (w razie potrzeby) można je usunąć. Prawdopodobnie informacji tych nie będziesz musiał wykorzystywać szczególnie często (chyba, że jesteś programistą-eksperymentatorem), ale w każdym systemie od czasu do czasu zdarzają się sytuacje awaryjne. Problemy mają zwyczaj mnożyć się przy wzroście liczby użytkowników, a wtedy restart systemu jest rzeczą dość uciążliwą. Polecenie ps pozwala przeważnie na uniknięcie konieczności resetowania komputera.

Konfigurowanie i dodawanie do systemu urządzeń SCSI omówione jest w rozdziale 36. „Obsługa urządzeń SCSI”.

Jak skonfigurować system, by można było korzystać z poczty elektronicznej, dowiesz się z rozdziału 40. „Konfigurowanie poczty”.

Polecenie tar i tworzenie kopii zapasowych przedstawione są w rozdziale 45. „Kopie zapasowe”.

564 Część VI Linux dla administratorów

564 E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\34.DOC

E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\34.DOC 563

Rozdzia³ 34. Procesy 563

myślę, że można to przełożyć nieco lepiej.



Wyszukiwarka

Podobne podstrony:
43, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
58, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
26, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
08, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
10, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
57, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
29, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
46, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
60, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
36, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
49, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
62, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
D, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
55, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
28, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
61, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
42, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
03, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta

więcej podobnych podstron