Podstawy zarządzania procesami w Linux

Podstawy zarządzania procesami w Linux

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