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.