Podstawy zarządzania procesami w Linux
- 967
- 102
- Tomasz Szatkowski
Cel
Poznaj podstaw zarządzania procesami w Linux
Wersje systemu operacyjnego i oprogramowania
- System operacyjny: - Wszystkie dystrybucje Linux
Wymagania
- Niektóre programy wymienione w tym samouczku wymagają dostępu do root
Trudność
ŁATWY
Konwencje
- # - Wymaga podanych poleceń Linuksa, które można wykonać z uprawnieniami root
bezpośrednio jako użytkownik root lub za pomocąsudo
Komenda - $ - Wymaga, aby podane polecenia Linux zostały wykonane jako zwykły użytkownik niepewny
Wstęp
Jedną z podstawowych działań administratora systemu jest monitorowanie i interakcja z procesami działającymi na komputerze. W tym samouczku zostaniesz wprowadzony do korzystania z niektórych fundamentalnych narzędzi, które pomogą Ci wykonać to istotne zadanie.
Polecenie PS
PS jest jednym z podstawowych programów stosowanych w monitorowaniu procesów: zasadniczo daje ci migawka
procesów działających na komputerze w tej chwili wywołasz polecenie. Zobaczmy to w akcji: najpierw spróbujemy uruchomić go bez żadnych opcji:
$ PID TTY TIME CMD 24424 PTS/0 00:00:00 Bash 24468 PTS/0 00:00:00 PS
Jak widać z powyższego wyjścia, pokazano tylko dwa procesy: grzmotnąć
z Pid
(identyfikator procesu) 24424
I Ps
siebie z PID 24468
. Dzieje się tak, ponieważ przy wywołaniu bez żadnej opcji, Ps
Polecenie pokazuje procesy powiązane z UID
użytkownika, który uruchomił polecenie, i terminal, z którego jest wywoływane.
Jak pokonać to ograniczenie? Używając -A
opcja, którą możemy stworzyć Ps
pokazać nam wszystkie procesy, z wyjątkiem Liderzy sesji
i procesy niezwiązane z terminal.
Lider sesji to proces, który ma PID, który jest taki sam z Sid
(Identyfikator sesji), której sesja jest (pierwszym) członkiem. Po utworzeniu procesu jest częścią tej samej sesji procesu nadrzędnego: ponieważ na konwencji identyfikator sesji jest taki sam z Pid
Z jego pierwszego członka nazywamy ten proces a lider sesji
. Spróbujmy biec Ps
z -A
opcja i sprawdź jego wyjście:
$ ps -a Pid Tty Time CMD 12466 TTY1 00:00:00 Gnome-session-B 12480 TTY1 00:17 Gnome-Shell 12879 Tty1 00:00:00 Xwayland 12954 TTY1 00:00:00 GSD-Sound 12955 Tty1 00:00:00 GSD-WACOM 12957 TTY1 00:00:00 GSD-XSettings 12961 Tty1 00:00:00 GSD-A11y-Keyboa 12962 Tty1 00:00:00 GSD-A11Y-Settin 12965 Tty1 00:00:00 GSDD -Clipboard 12966 TTY1 00:00:03 GSD-Color 12967 Tty1 00:00:00 GSD-DateTime 12970 Tty1 00:00:00 gsd-housekeepin 12971 -Media-Keys 12973 Tty1 00:00:00 GSD-MOUSE 12976 TTY1 00:00:00 GSD-Orientacja […]
Wyjście programu zostało obcięte, ale można łatwo zobaczyć, że obejmuje on teraz procesy należące do różnych terminali i użytkowników. Dane wyjściowe pokazuje nam informacje o Pid
w pierwszej kolumnie, Tty
w sekundę, CZAS
który jest skumulowanym czasem, który procesor wydał na proces, i CMD
które jest poleceniem, które rozpoczęło proces.
Aby mieć jeszcze bogatsze wyjście, możemy dodać -u
I -X
Opcje: ten pierwszy mówi Ps
dokonać wyboru według identyfikator użytkownika
, podczas gdy ten ostatni instruuje program, aby zawierał również procesy niezwiązane z terminalem, takie jak demony:
$ PS -AUX użytkownika PID %CPU %MEM VSZ RSS TTY STAT STAT Time Command COUNT 1 0.0 0.2 223932 8708 ? SS 20 lipca 0:04/usr/lib/systemd/systemd--Switched-Root--System--deserialize 25 root 2 0.0 0.0 0 0 ? S 20 lipca 0:00 [KTHREADD] Root 4 0.0 0.0 0 0 ? S< Jul20 0:00 [kworker/0:0H] root 6 0.0 0.0 0 0 ? S< Jul20 0:00 [mm_percpu_wq] root 7 0.0 0.0 0 0 ? S Jul20 0:00 [ksoftirqd/0] root 8 0.0 0.0 0 0 ? S Jul20 0:07 [rcu_sched] root 9 0.0 0.0 0 0 ? S Jul20 0:00 [rcu_bh] root 10 0.0 0.0 0 0 ? S Jul20 0:04 [rcuos/0] root 11 0.0 0.0 0 0 ? S Jul20 0:00 [rcuob/0] root 12 0.0 0.0 0 0 ? S Jul20 0:00 [migration/0] root 13 0.0 0.0 0 0 ? S Jul20 0:00 [watchdog/0] root 14 0.0 0.0 0 0 ? S Jul20 0:00 [cpuhp/0] root 15 0.0 0.0 0 0 ? S Jul20 0:00 [cpuhp/1] root 16 0.0 0.0 0 0 ? S Jul20 0:00 [watchdog/1] root 17 0.0 0.0 0 0 ? S Jul20 0:00 [migration/1] root 18 0.0 0.0 0 0 ? S Jul20 0:00 [ksoftirqd/1] root 20 0.0 0.0 0 0 ? S< Jul20 0:00 [kworker/1:0H] root 21 0.0 0.0 0 0 ? S Jul20 0:02 [rcuos/1] root 22 0.0 0.0 0 0 ? S Jul20 0:00 [rcuob/1] root 23 0.0 0.0 0 0 ? S Jul20 0:00 [cpuhp/2] root 24 0.0 0.0 0 0 ? S Jul20 0:00 [watchdog/2] root 25 0.0 0.0 0 0 ? S Jul20 0:00 [migration/2] root 26 0.0 0.0 0 0 ? S Jul20 0:00 [ksoftirqd/2] root 28 0.0 0.0 0 0 ? S< Jul20 0:00 [kworker/2:0H] [… ] egdoc 13128 0.0 0.1 74736 5388 ? Ss Jul20 0:00 /usr/lib/systemd/systemd --user egdoc 13133 0.0 0.0 106184 420 ? S Jul20 0:00 (sd-pam) egdoc 13143 0.0 0.1 218328 3612 ? Sl Jul20 0:00 /usr/bin/gnome-keyring-daemon --daemonize --login [… ]
Możesz zobaczyć, że dodano całkiem sporo nowych informacji. Pierwsza nowa kolumna wyjścia jest %PROCESOR
: To pokazuje wykorzystanie procesora procesu, wyrażone jako procent. Procent jest również używany dla następnej kolumny, %Mem
, który pokazuje pamięć fizyczną na maszynie używanej przez proces. VSZ
to wirtualna wielkość pamięci procesu wyrażona w kib.
Stat
Kolumna używa kodu do wyrażenia stanu procesu. Nie będziemy tutaj opisać wszystkich możliwych stanów, ale wystarczy wyjaśnić te pojawiające się na powyższym wyniku (możesz mieć pełny przegląd, konsultując się z PS Manpage).
Zbadajmy pierwszy proces w wyjściu: tak jest PID 1
, Dlatego jest pierwszym procesem wprowadzonym przez jądro. To ma sens, widzimy, że tak jest Systemd
, stosunkowo nowy system initin Linux, obecnie przyjęty przez prawie wszystkie dystrybucje. Przede wszystkim mamy S
co wskazuje, że proces jest w stanie przerywający sen
co oznacza, że jest bezczynny i obudzi się, gdy tylko otrzyma dane wejściowe. S
, Zamiast tego mówi nam, że proces to jest lider sesji
.
Kolejny symbol, który nie pojawia się w pierwszym surowym, ale w niektórych innych opisach procesów jest <
co wskazuje, że proces ma wysoki priorytet, a zatem niski Ładny
Wartość (zobaczymy, jaka jest dobra wartość w odpowiedniej sekcji tego samouczka). Jakiś L
w Stat
kolumna, wskazuje, że proces jest wielokrotny i +
Znak, że jest w grupie procesów na pierwszym planie.
Wreszcie w ostatniej kolumnie mamy POCZĄTEK
Kolumna, pokazując czas, w którym rozpoczęło się polecenie.
Kolejna fajna opcja, którą możemy przejść do Ps
polecenie jest -o
, która jest krótką wersją --format
. Ta opcja pozwala zmodyfikować dane wyjściowe za pomocą symboli zastępczych, określając, jakie kolumny wyświetlić. Na przykład bieganie:
$ PS -A -O%u%p%n%c
Da nam UŻYTKOWNIK
Kolumna pierwsza (%u), a następnie Pid
procesu (%p), przez Ni
kolumna (%n), która wskazuje Ładny
poziom i wreszcie przez KOMENDA
Kolumna (%c):
Użytkownik PID Ni root 1 0 Systemd root 2 0 kthreadd root 4-20 Kworker/0: 0h root 6-20 mm_percpu_wq root 7 0 ksoftirqd/0 root 8 0 rCU_SCHED root 9 0 rcU_BH root 10 0 rcUos/0 root 11 0 rcuob /0 Root 12 - Migracja/0 root 13 - Watchdog/0 Root 14 0 CPUHP/0 Root 15 0 CPUHP/1 Root 16 - Watchdog/1 Root 17 - Migracja/1 root 18 0 Ksoftirqd/1 root 20-20 Kworker/ 1: 0H root 21 0 rcuos/1 root 22 0 rcuob/1 root 23 0 cpuhp/2 root 24 - Watchdog/2 Root 25 - Migracja/2 root 26 0 Ksoftirqd/2
Używanie „góry” do dynamicznej interakcji z procesami
Chwila Ps
daje nam statyczną migawkę procesów i ich informacji w momencie ich uruchomienia, szczyt
Daje nam dynamiczny widok procesów, zaktualizowany w określonym przedziale czasowym, który możemy określić zarówno podczas uruchamiania programu, jak i interaktywnie (domyślnie to 3 sekundy).
TOP nie tylko pokazuje nam dynamiczną reprezentację uruchomionych procesów: możemy wchodzić w interakcje z nimi i z samym programem, używając niektórych kluczy. Na przykład naciskanie B
Pozwala nam przełączać użycie odważnych znaków, D
Pozwala nam wprowadzić wartość, aby zmienić czas opóźnienia, k
Pozwala nam wysłać sygnał do procesu, monitując o jego Pid
I dla sygnał
kod z Sigterm
bycie domyślnym.
Zmień priorytet procesów z Nicei i Renice
Jak widzieliśmy wcześniej, każdy proces ma priorytet
Przypisane do niego, co wskazuje, ile proces musi czekać na inne procesy za darmo, zanim będzie mógł do nich uzyskać dostęp. Priorytet ten można określić z wartością, która jest w zakresie, który wychodzi z -20
Do 19
. Im mniej wartość, tym najwyższy priorytet procesu. Na początku może to wydawać się sprzeczne z intuicją, ale zobacz to w ten sposób: im ładniejszy proces jest dla innych procesów, tym bardziej przewyższą go, uzyskując dostęp do zasobów.
Ale jak możemy ustawić priorytet procesu? Możemy użyć Ładny
program wykonania zadania. Powiedz, że chcesz uruchomić skrypt o najniższej możliwej wartości priorytetu: Wcześniej go w ten sposób:
$ Nice -n 19 ./scenariusz.cii
Możesz także zmienić priorytet programu, który już działa, używając Renice
znając to Pid
:
# Renice -n 15 pid
Gdzie PID jest identyfikatorem procesu programu. Pamiętaj tylko o tym Renice
Polecenie musi być uruchamiane za pomocą korzeniowych.
Wyślij sygnały do procesów z poleceniami Kill and Killall
Możemy użyć polecenia zabójcy, aby wysłać sygnał
do procesu należącego do nas lub do każdego procesu, jeśli mamy uprawnienia roczne. Różne sygnały, które możemy wysłać, są identyfikowane przez numer: możemy łatwo zobaczyć te korespondencje, uruchamiając polecenie zabójstwa -L
opcja:
$ Kill -l 1) westchnienie 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGKILL 16 ) Sigstkflt 17) Sigchld 18) Sigcont 19) Sigstop 20) Sigtstp 21) Sigttin 22) Sigttou 23) Sigurg 24) Sigxcpu 25) Sigxfsz 26) Sigvtalrm 27) Sigprof 28) Sigwinch 29) Sigio 30) Sigpwr 31) Sigsys 34) Sigvtalrm 35) Sigrtmin+1 36) Sigrtmin+2 37) Sigrtmin+3 38) Sigrtmin+4 39) Sigrtmin+5 40) Sigrtmin+6 41) Sigrtmin+7 42) Sigrtmin+8 43) Sigrtmin+9 44) Sigrtmin+10 10 45) Sigrtmin+11 46) Sigrtmin+12 47) Sigrtmin+13 48) Sigrtmin+14 49) Sigrtmin+15 50) Sigrtmax-14 51) Sigrtmax-13) Sigrtmax-12 53) Sigrtmax-11 54) Sigrtmax-10) 55) SIGRTMAX-9 56) SIGRTMAX-8) SIGRTMAX-7) SIGRTMAX-6) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) Sigrtmax
Jeśli nie zostanie przekazana żadna opcja zabić
polecenie, domyślnie wyśle Sigterm
sygnał do określonego procesu, na który ten ostatni może zareagować na różne sposoby: może natychmiast zatrzymać się, spróbować zrobić oczyszczenie przed zatrzymaniem lub po prostu zignorować sygnał.
Aby określić sygnał, który ma zostać wysłany za pomocą zabójstwa, uruchamiamy polecenie, a następnie rozdzielcz. Na przykład uruchomić Sigkill
sygnał, który powinniśmy uruchomić:
Zabij -9 pid
Sigkill
sygnał, w przeciwieństwie do Sigterm
nie może być złapany przez proces, który nie może zareagować: zostanie po prostu natychmiast zakończony.
Kolejnym sygnałem, który często zobaczysz, jest to Sigint
który jest sygnałem wysyłanym w klawiaturze przerwań (CTRL-C). Próbuje również zakończyć proces w wdzięczny sposób i może być zignorowany przez proces. Sigstop
I Sigcont
odpowiednio zawiesi i wznowi wykonanie procesu: to pierwsze, jak Sigkill
nie można złapać ani zignorować. Aby uzyskać pełną listę i opis sygnałów, aby zapoznać się z instrukcją sygnał (7)
działanie:
Sygnał Man 7
zabić wszystkich
Program ma ten sam cel zabić
, I podobnie jak zabójstwo, wysyła Sigterm
sygnał, gdy żaden inny nie jest określony (tym razem z --sygnał
opcja), ale zamiast odwoływać się do procesu przez ITS Pid
, zrobi to według nazwy polecenia, skutecznie zabijając wszystkie procesy działające w ramach tego samego.
Powiązane samouczki Linux:
- Rzeczy do zainstalowania na Ubuntu 20.04
- Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
- Najlepsze narzędzie do monitorowania systemu dla Linux
- Ubuntu 20.04 Monitorowanie systemu za pomocą widżetów study
- Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
- Linux Pliki konfiguracyjne: Top 30 Najważniejsze
- Optymalizacja wydajności Linux: Narzędzia i techniki
- Ubuntu 22.04 Monitorowanie systemu za pomocą widżetów study
- Czy Linux może uzyskać wirusy? Badanie podatności Linuksa…
- Pobierz Linux
- « Jak wygenerować losową frazę słów dla portfela Bitcoin w systemie Linux
- Dbaj o bezpieczeństwo swojego /domu dzięki kopii zapasowych CRON »