Unix / Linux - Zarządzanie procesami

W tym rozdziale omówimy szczegółowo zarządzanie procesami w systemie Unix. Kiedy uruchamiasz program w systemie Unix, system tworzy specjalne środowisko dla tego programu. To środowisko zawiera wszystko, co jest potrzebne systemowi do uruchomienia programu, tak jakby w systemie nie był uruchomiony żaden inny program.

Za każdym razem, gdy wydajesz polecenie w systemie Unix, tworzy ono lub uruchamia nowy proces. Kiedy wypróbowałeślspolecenie, aby wyświetlić zawartość katalogu, rozpocząłeś proces. Mówiąc prościej, proces to instancja uruchomionego programu.

System operacyjny śledzi procesy za pomocą pięciocyfrowego numeru identyfikacyjnego znanego jako pid albo process ID. Każdy proces w systemie ma unikalny charakterpid.

Pidy ostatecznie się powtarzają, ponieważ wszystkie możliwe liczby są zużywane, a następny pid przechodzi lub zaczyna od nowa. W żadnym momencie w systemie nie istnieją dwa procesy z tym samym pid, ponieważ jest to pid, którego Unix używa do śledzenia każdego procesu.

Rozpoczęcie procesu

Kiedy zaczynasz proces (uruchamiasz polecenie), możesz go uruchomić na dwa sposoby -

  • Procesy pierwszoplanowe
  • Procesy w tle

Procesy pierwszoplanowe

Domyślnie każdy uruchamiany proces działa na pierwszym planie. Pobiera dane wejściowe z klawiatury i wysyła dane wyjściowe na ekran.

Możesz to zobaczyć w przypadku lsKomenda. Jeśli chcesz wyświetlić listę wszystkich plików w bieżącym katalogu, możesz użyć następującego polecenia -

$ls ch*.doc

Spowoduje to wyświetlenie wszystkich plików, których nazwy zaczynają się od ch i zakończ .doc -

ch01-1.doc   ch010.doc  ch02.doc    ch03-2.doc 
ch04-1.doc   ch040.doc  ch05.doc    ch06-2.doc
ch01-2.doc   ch02-1.doc

Proces działa na pierwszym planie, dane wyjściowe są kierowane na mój ekran, a jeśli ls polecenie chce wprowadzić dane (czego nie robi), czeka na to z klawiatury.

Gdy program działa na pierwszym planie i jest czasochłonny, nie można uruchamiać żadnych innych poleceń (uruchamiać inne procesy), ponieważ monit nie byłby dostępny, dopóki program nie zakończy przetwarzania i nie wyjdzie.

Procesy w tle

Proces w tle działa bez połączenia z klawiaturą. Jeśli proces w tle wymaga wprowadzenia danych z klawiatury, czeka.

Zaletą uruchamiania procesu w tle jest to, że można uruchamiać inne polecenia; nie musisz czekać, aż się zakończy, aby rozpocząć kolejny!

Najprostszym sposobem rozpoczęcia procesu w tle jest dodanie znaku handlowego „i” (&) na końcu polecenia.

$ls ch*.doc &

Spowoduje to wyświetlenie wszystkich plików, których nazwy zaczynają się od ch i zakończ .doc -

ch01-1.doc   ch010.doc  ch02.doc    ch03-2.doc 
ch04-1.doc   ch040.doc  ch05.doc    ch06-2.doc
ch01-2.doc   ch02-1.doc

Tutaj, jeśli ls polecenie potrzebuje dowolnego wejścia (czego nie robi), przechodzi w stan zatrzymania, dopóki nie przeniesiemy go na pierwszy plan i nie przekażemy mu danych z klawiatury.

Pierwsza linia zawiera informacje o procesie w tle - numer zadania i identyfikator procesu. Musisz znać numer zadania, aby manipulować nim między tłem a pierwszym planem.

Naciśnij klawisz Enter, a zobaczysz następujące -

[1]   +   Done                 ls ch*.doc &
$

Pierwsza linia mówi, że lsproces w tle polecenia kończy się pomyślnie. Drugi to monit o inne polecenie.

Lista uruchomionych procesów

Możesz łatwo zobaczyć własne procesy, uruchamiając ps (stan procesu) polecenie w następujący sposób -

$ps
PID       TTY      TIME        CMD
18358     ttyp3    00:00:00    sh
18361     ttyp3    00:01:31    abiword
18789     ttyp3    00:00:00    ps

Jedną z najczęściej używanych flag dla ps jest -f (pełne), która zawiera więcej informacji, jak pokazano w poniższym przykładzie -

$ps -f
UID      PID  PPID C STIME    TTY   TIME CMD
amrood   6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood   6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood   3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood   6892 3662 4 10:51:50 pts/6 0:00 ps -f

Oto opis wszystkich pól wyświetlanych przez ps -f polecenie -

Sr.No. Kolumna i opis
1

UID

Identyfikator użytkownika, do którego należy ten proces (osoba go obsługująca)

2

PID

Identyfikator procesu

3

PPID

Identyfikator procesu nadrzędnego (identyfikator procesu, który go uruchomił)

4

C

Wykorzystanie procesora przez proces

5

STIME

Czas rozpoczęcia procesu

6

TTY

Typ terminala powiązany z procesem

7

TIME

Czas procesora zajęty przez proces

8

CMD

Polecenie, które rozpoczęło ten proces

Istnieją inne opcje, których można używać razem z ps polecenie -

Sr.No. Opcja i opis
1

-a

Wyświetla informacje o wszystkich użytkownikach

2

-x

Pokazuje informacje o procesach bez terminali

3

-u

Wyświetla dodatkowe informacje, takie jak opcja -f

4

-e

Wyświetla rozszerzone informacje

Zatrzymywanie procesów

Zakończenie procesu można przeprowadzić na kilka różnych sposobów. Często z poziomu polecenia konsoli wysłanie naciśnięcia klawisza CTRL + C (domyślny znak przerwania) kończy polecenie. Działa to, gdy proces działa w trybie pierwszego planu.

Jeśli proces działa w tle, należy uzyskać jego identyfikator zadania przy użyciu rozszerzenia psKomenda. Następnie możesz użyćkill polecenie zabicia procesu w następujący sposób -

$ps -f
UID      PID  PPID C STIME    TTY   TIME CMD
amrood   6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood   6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood   3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood   6892 3662 4 10:51:50 pts/6 0:00 ps -f
$kill 6738
Terminated

Tutaj kill polecenie kończy działanie first_oneproces. Jeśli proces ignoruje zwykłe polecenie zabicia, możesz użyćkill -9 a następnie identyfikator procesu w następujący sposób -

$kill -9 6738
Terminated

Procesy nadrzędne i podrzędne

Każdy proces unix ma przypisane dwa numery identyfikacyjne: identyfikator procesu (pid) i identyfikator procesu nadrzędnego (ppid). Każdy proces użytkownika w systemie ma proces nadrzędny.

Większość poleceń, które uruchamiasz, ma powłokę jako rodzica. Sprawdźps -f przykład, w którym to polecenie wyświetlało zarówno identyfikator procesu, jak i identyfikator procesu nadrzędnego.

Procesy zombie i sieroty

Zwykle, gdy proces potomny zostaje zabity, proces nadrzędny jest aktualizowany za pomocą pliku SIGCHLDsygnał. Następnie rodzic może wykonać inne zadanie lub w razie potrzeby ponownie uruchomić nowe dziecko. Jednak czasami proces macierzysty jest zabijany przed zabiciem jego dziecka. W tym przypadku „rodzic wszystkich procesów”initproces, staje się nowym PPID (identyfikator procesu nadrzędnego). W niektórych przypadkach procesy te nazywane są procesami osieroconymi.

Kiedy proces zostaje zabity, a ps lista może nadal wyświetlać proces z rozszerzeniem Zstan. To jest zombie lub nieistniejący proces. Proces jest martwy i nie jest używany. Procesy te różnią się od procesów osieroconych. Zakończyli wykonywanie, ale nadal znajdują wpis w tabeli procesów.

Procesy demona

Demony to związane z systemem procesy działające w tle, które często działają z uprawnieniami uprawnień administratora i żądań usług pochodzących z innych procesów.

Demon nie ma kontrolującego terminala. Nie może się otworzyć/dev/tty. Jeśli zrobisz"ps -ef" i spójrz na tty pole, wszystkie demony będą miały ? dla tty.

Mówiąc dokładniej, demon to proces działający w tle, zwykle czekający na coś, z czym może pracować. Na przykład demon drukarki czekający na polecenia drukowania.

Jeśli masz program, który wymaga długotrwałego przetwarzania, warto zrobić z niego demona i uruchamiać go w tle.

Najwyższe polecenie

Plik top Polecenie to bardzo przydatne narzędzie do szybkiego wyświetlania procesów posortowanych według różnych kryteriów.

Jest to interaktywne narzędzie diagnostyczne, które często się aktualizuje i wyświetla informacje o pamięci fizycznej i wirtualnej, wykorzystaniu procesora, średnich obciążeniach i zajętych procesach.

Oto prosta składnia, aby uruchomić polecenie top i zobaczyć statystyki wykorzystania procesora przez różne procesy -

$top

Identyfikator zlecenia a identyfikator procesu

Procesy w tle i zawieszone są zwykle obsługiwane za pośrednictwem job number (job ID). Numer ten różni się od identyfikatora procesu i jest używany, ponieważ jest krótszy.

Ponadto zadanie może składać się z wielu procesów uruchomionych szeregowo lub w tym samym czasie, równolegle. Korzystanie z identyfikatora zadania jest łatwiejsze niż śledzenie poszczególnych procesów.