34 Procesy.DOC

(83 KB) Pobierz









Rozdział 34.
Procesy









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










Rozdzia³ 34. ¨ Procesy              563

Tim Parker

W tym rozdziale:

u                                          Co trzeba wiedzieć o procesach             

u                                          Polecenie ps             

u                                          Polecenie kill             

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.

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

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                                          procesy interaktywne – uruchamiane poprzez powłokę i przez nią kontrolowane; procesy takie mogą działać w tle lub na pierwszym planie;

u                                          procesy wsadowe (ang. batch process), nie powiązane z żadnym terminalem, ale wstawiane do kolejki i wykonywane sekwencyjnie;

u                                          procesy rezydentne – czyli demony (ang. daemons); są one zwykle uruchamiane podczas startu systemu i pracują w tle przez cały czas działania Linuxa.

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              ...

Zgłoś jeśli naruszono regulamin