Administrator systemu Linux - zarządzanie procesami

Poniżej przedstawiono typowe polecenia używane w zarządzaniu procesami - bg, fg, nohup, ps, pstree, top, kill, killall, free, uptime, nice.

Pracuj z procesami

Quick Note: Process PID in Linux

W Linuksie każdy działający proces otrzymuje numer PID lub numer identyfikacyjny procesu. Ten PID to sposób, w jaki CentOS identyfikuje określony proces. Jak już omówiliśmy, systemd jest pierwszym uruchomionym procesem , któremu nadano PID równy 1 w CentOS.

Pgrep służy do pobierania Linux PID dla danej nazwy procesu.

[root@CentOS]# pgrep systemd 
1 
[root@CentOS]#

Jak widać, polecenie pgrep zwraca bieżący PID z systemd.

Podstawowy proces CentOS i zarządzanie zadaniami w CentOS

Podczas pracy z procesami w systemie Linux ważne jest, aby wiedzieć, jak podstawowe procesy pierwszego planu i tła są wykonywane w wierszu poleceń.

  • fg - Przenosi proces na pierwszy plan

  • bg - Przenosi proces w tło

  • jobs - Lista bieżących procesów podłączonych do powłoki

  • ctrl+z - Kombinacja klawiszy Control + Z, aby uśpić bieżący proces

  • & - Rozpoczyna proces w tle

Zacznijmy używać polecenia powłoki sleep .sleeppo prostu zrobi tak, jak jest nazwana, spać przez określony czas: spać .

[root@CentOS ~]$ jobs

[root@CentOS ~]$ sleep 10 & 
[1] 12454 

[root@CentOS ~]$ sleep 20 & 
[2] 12479

[root@CentOS ~]$ jobs 
[1]-  Running                 sleep 10 & 
[2]+  Running                 sleep 20 &

[cnetos@CentOS ~]$

Teraz przenieśmy pierwszą pracę na pierwszy plan -

[root@CentOS ~]$ fg 1 
sleep 10

Jeśli podążasz dalej, zauważysz, że zadanie na pierwszym planie utknęło w twojej powłoce. Teraz uśpijmy proces, a następnie włączmy go ponownie w tle.

  • Hit control + z
  • Wpisz: bg 1, wysyłając pierwszą pracę w tle i uruchamiając ją.
[root@CentOS ~]$ fg 1 
sleep 20 
^Z 
[1]+  Stopped                 sleep 20

[root@CentOS ~]$ bg 1 
[1]+ sleep 20 &

[root@CentOS ~]$

nohup

Podczas pracy z powłoki lub terminala warto zauważyć, że domyślnie wszystkie procesy i zadania podłączone do powłoki kończą się, gdy powłoka jest zamknięta lub użytkownik się wyloguje. Podczas korzystania z nohup proces będzie kontynuowany, jeśli użytkownik wyloguje się lub zamknie powłokę, do której jest podłączony.

[root@CentOS]# nohup ping www.google.com & 
[1] 27299 
nohup: ignoring input and appending output to ‘nohup.out’

[root@CentOS]# pgrep ping 
27299

[root@CentOS]# kill -KILL `pgrep ping` 
[1]+  Killed                  nohup ping www.google.com

[root@CentOS rdc]# cat nohup.out  
PING www.google.com (216.58.193.68) 56(84) bytes of data. 
64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 1 ttl = 128
time = 51.6 ms 
64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 2 ttl = 128
time = 54.2 ms 
64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 3 ttl = 128
time = 52.7 ms

ps Command

Plik psPolecenie jest powszechnie używane przez administratorów do badania migawek określonego procesu. ps jest powszechnie używany z grep do odfiltrowania określonego procesu do analizy.

[root@CentOS ~]$ ps axw | grep python 
762   ?        Ssl    0:01 /usr/bin/python -Es /usr/sbin/firewalld --nofork -nopid 
1296  ?        Ssl    0:00 /usr/bin/python -Es /usr/sbin/tuned -l -P 
15550 pts/0    S+     0:00 grep --color=auto python

W powyższym poleceniu widzimy wszystkie procesy korzystające z interpretera Pythona . Do wyników dołączono również nasze polecenie grep, które szukało ciągu znaków python .

Poniżej przedstawiono najpopularniejsze przełączniki wiersza poleceń używane z ps .

Przełącznik Akcja
za Wyklucza ograniczenia tylko procesów raportowania dla bieżącego użytkownika
x Pokazuje procesy niepodłączone do terminala lub powłoki
w Formatuje szerokie wyświetlanie danych wyjściowych
mi Pokazuje środowisko po poleceniu
-mi Wybiera wszystkie procesy
-o Sformatowane wyjście zdefiniowane przez użytkownika
-u Pokazuje wszystkie procesy określonego użytkownika
-DO Pokazuje wszystkie procesy według nazwy lub identyfikatora procesu
--sortować Sortuje procesy według definicji

Aby zobaczyć wszystkie procesy używane przez użytkownika nobody -

[root@CentOS ~]$ ps -u nobody 
PID TTY          TIME CMD 
1853 ?        00:00:00 dnsmasq 

[root@CentOS ~]$

Aby zobaczyć wszystkie informacje o procesie firewalld -

[root@CentOS ~]$ ps -wl -C firewalld 
F   S   UID   PID   PPID   C   PRI   NI   ADDR   SZ   WCHAN   TTY   TIME      CMD
0   S     0   762      1   0    80   0     -   81786  poll_s   ?   00:00:01 firewalld 

[root@CentOS ~]$

Zobaczmy, które procesy zużywają najwięcej pamięci -

[root@CentOS ~]$ ps aux  --sort=-pmem | head -10 
USER       PID   %CPU   %MEM   VSZ     RSS   TTY   STAT   START   TIME   COMMAND 
cnetos     6130   0.7   5.7   1344512 108364  ?      Sl   02:16   0:29  /usr/bin/gnome-shell 
cnetos     6449   0.0   3.4   1375872 64440   ?      Sl   02:16   0:00  /usr/libexec/evolution-calendar-factory 
root       5404   0.6   2.1   190256  39920 tty1     Ssl+ 02:15   0:27  /usr/bin/Xorg :0 -background none -noreset -audit 4 -verbose -auth /run/gdm/auth-for-gdm-iDefCt/database -seat seat0 -nolisten tcp vt1 
cnetos     6296   0.0   1.7   1081944 32136   ?      Sl   02:16   0:00  /usr/libexec/evolution/3.12/evolution-alarm-notify 
cnetos     6350   0.0   1.5   560728  29844   ?      Sl   02:16   0:01  /usr/bin/prlsga 
cnetos     6158   0.0   1.4   1026956 28004   ?      Sl   02:16   0:00  /usr/libexec/gnome-shell-calendar-server 
cnetos     6169   0.0   1.4   1120028 27576   ?      Sl   02:16   0:00  /usr/libexec/evolution-source-registry 
root       762    0.0   1.4   327144  26724   ?      Ssl  02:09   0:01  /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid 
cnetos     6026   0.0  1.4 1090832 26376      ?      Sl   02:16   0:00  /usr/libexec/gnome-settings-daemon

[root@CentOS ~]$

Zobacz wszystkie procesy według centów użytkownika i formatu, wyświetlając niestandardowe dane wyjściowe -

[cnetos@CentOS ~]$ ps -u cnetos -o pid,uname,comm 
   PID    USER     COMMAND 
   5802  centos   gnome-keyring-d 
   5812  cnetos   gnome-session 
   5819  cnetos   dbus-launch 
   5820  cnetos   dbus-daemon 
   5888  cnetos   gvfsd 
   5893  cnetos   gvfsd-fuse 
   5980  cnetos   ssh-agent   
   5996  cnetos   at-spi-bus-laun

pstree Command

pstreejest podobny do ps, ale nie jest często używany. Wyświetla procesy w bardziej uporządkowanej formie drzewa.

[centos@CentOS ~]$ pstree 
  systemd─┬─ModemManager───2*[{ModemManager}] 
          ├─NetworkManager─┬─dhclient 
          │                └─2*[{NetworkManager}] 
          ├─2*[abrt-watch-log] 
          ├─abrtd 
          ├─accounts-daemon───2*[{accounts-daemon}] 
          ├─alsactl 
          ├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon} 
          │                 └─3*[{at-spi-bus-laun}] 
          ├─at-spi2-registr───2*[{at-spi2-registr}] 
          ├─atd 
          ├─auditd─┬─audispd─┬─sedispatch 
          │        │         └─{audispd} 
          │        └─{auditd} 
          ├─avahi-daemon───avahi-daemon 
          ├─caribou───2*[{caribou}] 
          ├─cgrulesengd 
          ├─chronyd 
          ├─colord───2*[{colord}] 
          ├─crond 
          ├─cupsd

Całkowity wynik z pstree może przekroczyć 100 linii. Zwykle ps poda bardziej przydatne informacje.

góra Polecenie

topjest jednym z najczęściej używanych poleceń podczas rozwiązywania problemów z wydajnością w systemie Linux. Jest to przydatne do tworzenia statystyk w czasie rzeczywistym i monitorowania procesów w systemie Linux. Poniżej przedstawiono domyślne wyjście polecenia top po wywołaniu z wiersza poleceń.

Tasks: 170 total,   1 running, 169 sleeping,   0 stopped,   0 zombie 
%Cpu(s):  2.3 us,  2.0 sy,  0.0 ni, 95.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st 
KiB Mem :  1879668 total,   177020 free,   607544 used,  1095104 buff/cache 
KiB Swap:  3145724 total,  3145428 free,      296 used.  1034648 avail Mem 
 
PID    USER     PR   NI    VIRT     RES   SHR    S  %CPU  %MEM   TIME+   COMMAND
5404   root     20   0    197832   48024  6744   S   1.3   2.6  1:13.22   Xorg
8013   centos   20   0    555316   23104  13140  S   1.0   1.2  0:14.89   gnome-terminal-
6339   centos   20   0    332336   6016   3248   S   0.3   0.3  0:23.71   prlcc
6351   centos   20   0    21044    1532   1292   S   0.3   0.1  0:02.66   prlshprof

Typowe klawisze skrótu używane podczas uruchamiania na górze ( dostęp do klawiszy skrótu uzyskuje się po naciśnięciu klawisza, gdy top działa w powłoce).

Komenda Akcja
b Włącza / wyłącza pogrubienie w górnym menu
z Zmienia schemat kolorów
l Cyklicznie średni kurs obciążenia
m Cyklicznie średni nagłówek pamięci
t Nagłówek informacji o zadaniu
godz Menu pomocy
Shift + F. Dostosowuje sortowanie i pola wyświetlania

Poniżej przedstawiono typowe przełączniki wiersza poleceń dla top .

Komenda Akcja
-o Sortuje według kolumny (można poprzedzić - lub +, aby posortować rosnąco lub malejąco)
-u Pokazuje tylko procesy od określonego użytkownika
-re Aktualizuje czas opóźnienia top
-O Zwraca listę kolumn, w których u góry można zastosować sortowanie

Sortowanie ekran opcji w górę, przedstawione za pomocą Shift + F . Ten ekran umożliwia dostosowanie górnych opcji wyświetlania i sortowania.

Fields Management for window 1:Def, whose current sort field is %MEM 
Navigate with Up/Dn, Right selects for move then <Enter> or Left commits, 
 'd' or <Space> toggles display, 's' sets sort.  Use 'q' or <Esc> to end!
 
* PID     = Process Id             TGID    = Thread Group Id      
* USER    = Effective User Name    ENVIRON = Environment vars     
* PR      = Priority               vMj     = Major Faults delta   
* NI      = Nice Value             vMn     = Minor Faults delta   
* VIRT    = Virtual Image (KiB)    USED    = Res+Swap Size (KiB)  
* RES     = Resident Size (KiB)    nsIPC   = IPC namespace Inode  
* SHR     = Shared Memory (KiB)    nsMNT   = MNT namespace Inode
* S       = Process Status         nsNET   = NET namespace Inode  
* %CPU    = CPU Usage              nsPID   = PID namespace Inode  
* %MEM    = Memory Usage (RES)     nsUSER  = USER namespace Inode 
* TIME+   = CPU Time, hundredths   nsUTS   = UTS namespace Inode  
* COMMAND = Command Name/Line 
PPID    = Parent Process pid
UID     = Effective User Id

u góry , pokazując procesy dla użytkownika rdc i posortowane według użycia pamięci -

PID   USER  %MEM  PR  NI    VIRT    RES    SHR    S %CPU     TIME+    COMMAND
 6130  rdc    6.2  20   0  1349592  117160  33232  S  0.0   1:09.34    gnome-shell
 6449  rdc    3.4  20   0  1375872   64428  21400  S  0.0   0:00.43    evolution-calen
 6296  rdc    1.7  20   0  1081944   32140  22596  S  0.0   0:00.40    evolution-alarm
 6350  rdc    1.6  20   0   560728   29844   4256  S  0.0   0:10.16    prlsga
 6281  rdc    1.5  20   0  1027176   28808  17680  S  0.0   0:00.78    nautilus
 6158  rdc    1.5  20   0  1026956   28004  19072  S  0.0   0:00.20    gnome-shell-cal

Wyświetlanie prawidłowych górnych pól (skondensowane) -

[centos@CentOS ~]$ top -O 
PID 
PPID 
UID 
USER 
RUID 
RUSER 
SUID 
SUSER 
GID 
GROUP 
PGRP 
TTY 
TPGID

kill Command

Plik killpolecenie służy do zabijania procesu z powłoki poleceń za pośrednictwem jego PID. Po zabiciu procesu, musimy podać sygnał do wysłania. Sygnał pozwala jądru wiedzieć, jak chcemy zakończyć proces. Najczęściej używanymi sygnałami są -

  • SIGTERMjest implikowane, ponieważ jądro informuje proces, że powinien się zatrzymać, gdy jest to bezpieczne. SIGTERM daje procesowi możliwość bezpiecznego wyjścia i wykonania operacji bezpiecznego wyjścia.

  • SIGHUPwiększość demonów uruchomi się ponownie po wysłaniu SIGHUP . Jest to często używane w procesach, gdy wprowadzono zmiany w pliku konfiguracyjnym.

  • SIGKILLponieważ SIGTERM jest równoważne z żądaniem zamknięcia procesu. Jądro potrzebuje opcji zakończenia procesu, który nie będzie spełniał żądań. Gdy proces jest zawieszony, opcja SIGKILL jest używana do jawnego zamykania procesu.

Aby wyświetlić listę wszystkich sygnałów, które można wysłać za pomocą opcji kill, można użyć opcji -l -

[root@CentOS]# kill -l 
1) SIGHUP           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) SIGTERM
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) SIGRTMIN      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   45) SIGRTMIN+11   46) SIGRTMIN+12   47) SIGRTMIN+13 
48) SIGRTMIN+14    49) SIGRTMIN+15   50) SIGRTMAX-14   51) SIGRTMAX-13   52) SIGRTMAX-12 
53) SIGRTMAX-11    54) SIGRTMAX-10   55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7
58) SIGRTMAX-6     59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2
63) SIGRTMAX-1     64) SIGRTMAX

[root@CentOS rdc]#

Użycie SIGHUP do ponownego uruchomienia systemu.

[root@CentOS]# pgrep systemd 
1 
464 
500 
643 
15071

[root@CentOS]# kill -HUP 1

[root@CentOS]# pgrep systemd
1 
464 
500 
643 
15196 
15197 
15198

[root@CentOS]#

pkillpozwoli administratorowi na wysłanie sygnału zabicia według nazwy procesu.

[root@CentOS]# pgrep ping 
19450 
[root@CentOS]# pkill -9 ping 
[root@CentOS]# pgrep ping 
[root@CentOS]#

killallzabije wszystkie procesy. Uważaj, używając funkcji killall jako root, ponieważ spowoduje to zabicie wszystkich procesów dla wszystkich użytkowników.

[root@CentOS]# killall chrome

darmowe polecenie

freejest dość prostym poleceniem, często używanym do szybkiego sprawdzenia pamięci systemu. Wyświetla całkowitą ilość używanej pamięci fizycznej i pamięci wymiany.

[root@CentOS]# free 
             total       used      free      shared      buff/cache      available 
Mem:        1879668     526284    699796     10304        653588          1141412 
Swap:       3145724          0    3145724

[root@CentOS]#

niezłe polecenie

nicepozwoli administratorowi ustawić priorytet planowania procesu pod względem wykorzystania procesora. Przyjemność to w zasadzie sposób, w jaki jądro planuje przedziały czasu procesora dla procesu lub zadania. Domyślnie zakłada się, że proces ma równy dostęp do zasobów procesora.

Najpierw użyjmy top, aby sprawdzić zgodność aktualnie uruchomionych procesów.

PID   USER   PR   NI    VIRT    RES    SHR   S  %CPU  %MEM     TIME+    COMMAND
28    root   39   19       0      0      0   S  0.0   0.0    0:00.17    khugepaged
690   root   39   19   16808   1396   1164   S  0.0   0.1    0:00.01    alsactl]
9598  rdc    39   19  980596  21904  10284   S  0.0   1.2    0:00.27    tracker-extract
9599  rdc    39   19  469876   9608   6980   S  0.0   0.5    0:00.04    tracker-miner-a
9609  rdc    39   19  636528  13172   8044   S  0.0   0.7    0:00.12    tracker-miner-f
9611  rdc    39   19  469620   8984   6496   S  0.0   0.5    0:00.02    tracker-miner-u
27    root   25    5       0      0      0   S  0.0   0.0    0:00.00    ksmd
637   rtkit  21    1  164648   1276   1068   S  0.0   0.1    0:00.11    rtkit-daemon
1     root   20    0  128096   6712   3964   S  0.3   0.4    0:03.57    systemd
2     root   20    0       0      0      0   S  0.0   0.0    0:00.01    kthreadd
3     root   20    0       0      0      0   S  0.0   0.0    0:00.50    ksoftirqd/0
7     root   20    0       0      0      0   S  0.0   0.0    0:00.00    migration/0
8     root   20    0       0      0      0   S  0.0   0.0    0:00.00    rcu_bh
9     root   20    0       0      0      0   S  0.0   0.0    0:02.07    rcu_sched

Chcemy skupić się na kolumnie NICE przedstawionej przez NI . Zakres uprzejmości może wynosić od -20 do dodatniej 19. -20 oznacza najwyższy podany priorytet.

nohup nice --20 ping www.google.com &

renice

renice pozwala nam zmienić bieżący priorytet procesu, który już działa.

renice 17 -p 30727

Powyższe polecenie obniży priorytet naszego polecenia procesu ping .