Amministratore Linux: gestione dei processi

Di seguito sono riportati i comandi comuni utilizzati con Process Management: bg, fg, nohup, ps, pstree, top, kill, killall, free, uptime, nice.

Lavora con i processi

Quick Note: Process PID in Linux

In Linux a ogni processo in esecuzione viene assegnato un numero PID o ID processo. Questo PID è il modo in cui CentOS identifica un particolare processo. Come abbiamo discusso, systemd è il primo processo avviato e dato un PID di 1 in CentOS.

Pgrep viene utilizzato per ottenere il PID Linux per un dato nome di processo.

[[email protected]]# pgrep systemd 
1 
[[email protected]]#

Come visto, il comando pgrep restituisce il PID corrente di systemd.

Processo CentOS di base e gestione dei lavori in CentOS

Quando si lavora con i processi in Linux è importante sapere come vengono eseguiti i processi di base in primo piano e in background dalla riga di comando.

  • fg - Porta il processo in primo piano

  • bg - Sposta il processo in background

  • jobs - Elenco dei processi correnti allegati alla shell

  • ctrl+z - Combinazione di tasti Control + z per sospendere il processo corrente

  • & - Avvia il processo in background

Cominciamo a usare il comando di shell sleep .sleepfarà semplicemente come viene chiamato, dormirà per un periodo di tempo definito: sleep .

[[email protected] ~]$ jobs

[[email protected] ~]$ sleep 10 & 
[1] 12454 

[[email protected] ~]$ sleep 20 & 
[2] 12479

[[email protected] ~]$ jobs 
[1]-  Running                 sleep 10 & 
[2]+  Running                 sleep 20 &

[[email protected] ~]$

Ora, portiamo in primo piano il primo lavoro:

[[email protected] ~]$ fg 1 
sleep 10

Se stai seguendo, noterai che il lavoro in primo piano è bloccato nel tuo guscio. Ora mettiamo il processo in stato di stop, quindi riattivalo in background.

  • Premi control + z
  • Digita: bg 1, inviando il primo lavoro in background e avviandolo.
[[email protected] ~]$ fg 1 
sleep 20 
^Z 
[1]+  Stopped                 sleep 20

[[email protected] ~]$ bg 1 
[1]+ sleep 20 &

[[email protected] ~]$

nohup

Quando si lavora da una shell o da un terminale, vale la pena notare che per impostazione predefinita tutti i processi e i lavori collegati alla shell terminano quando la shell viene chiusa o l'utente si disconnette. Quando si utilizza nohup, il processo continuerà a essere eseguito se l'utente si disconnette o chiude la shell a cui è collegato il processo.

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

[[email protected]]# pgrep ping 
27299

[[email protected]]# kill -KILL `pgrep ping` 
[1]+  Killed                  nohup ping www.google.com

[[email protected] 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

comando ps

Il psviene comunemente utilizzato dagli amministratori per esaminare le istantanee di un processo specifico. ps è comunemente usato con grep per filtrare un processo specifico da analizzare.

[[email protected] ~]$ 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

Nel comando precedente, vediamo tutti i processi che utilizzano l' interprete python . Con i risultati è stato incluso anche il nostro comando grep, alla ricerca della stringa python .

Di seguito sono riportate le opzioni della riga di comando più comuni utilizzate con ps .

Interruttore Azione
un Esclude i vincoli dei soli processi di reporting per l'utente corrente
X Mostra i processi non collegati a una tty o shell
w Formatta la visualizzazione ampia dell'output
e Mostra l'ambiente dopo il comando
-e Seleziona tutti i processi
-o Output formattato definito dall'utente
-u Mostra tutti i processi di un utente specifico
-C Mostra tutti i processi per nome o ID processo
--ordinare Ordina i processi per definizione

Per vedere tutti i processi in uso dall'utente nessuno :

[[email protected] ~]$ ps -u nobody 
PID TTY          TIME CMD 
1853 ?        00:00:00 dnsmasq 

[[email protected] ~]$

Per visualizzare tutte le informazioni sul processo firewalld :

[[email protected] ~]$ 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 

[[email protected] ~]$

Vediamo quali processi consumano più memoria:

[[email protected] ~]$ 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

[[email protected] ~]$

Vedi tutti i processi per centesimi utente e formato, visualizzando l'output personalizzato -

[[email protected] ~]$ 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

comando pstree

pstreeè simile a ps ma non viene utilizzato spesso. Visualizza i processi in modo più ordinato.

[[email protected] ~]$ 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

L'output totale di pstree può superare le 100 righe. Di solito, ps fornisce informazioni più utili.

Comando in alto

topè uno dei comandi più utilizzati per la risoluzione dei problemi di prestazioni in Linux. È utile per le statistiche in tempo reale e il monitoraggio dei processi in Linux. Di seguito è riportato l'output predefinito di top quando viene attivato dalla riga di comando.

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

Tasti di scelta rapida comuni utilizzati durante l'esecuzione di top ( è possibile accedere ai tasti di scelta rapida premendo il tasto mentre top è in esecuzione nella shell).

Comando Azione
b Abilita / disabilita l'evidenziazione in grassetto nel menu superiore
z Cambia lo schema dei colori
l Cicla l'intestazione media del carico
m Cicla l'intestazione media della memoria
t Intestazione delle informazioni sull'attività
h Menu della guida
MAIUSC + F Personalizza l'ordinamento e la visualizzazione dei campi

Di seguito sono riportate le opzioni della riga di comando comuni per top .

Comando Azione
-o Ordina per colonna (può anteporre - o + per ordinare in ordine crescente o decrescente)
-u Mostra solo i processi di un utente specificato
-d Aggiorna il tempo di ritardo della parte superiore
-O Restituisce un elenco di colonne che in alto possono applicare l'ordinamento

Ordinamento schermata delle opzioni in alto, presentato usando Shift + F . Questa schermata consente la personalizzazione della visualizzazione superiore e delle opzioni di ordinamento.

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

in alto , che mostra i processi per l'utente rdc e ordinati in base all'utilizzo della memoria -

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

Visualizzazione di campi superiori validi (condensati) -

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

kill Command

Il killcomando viene utilizzato per terminare un processo dalla shell dei comandi tramite il suo PID. Quando si uccide un processo, è necessario specificare un segnale da inviare. Il segnale fa sapere al kernel come vogliamo terminare il processo. I segnali più comunemente usati sono:

  • SIGTERMè implicito poiché il kernel fa sapere a un processo che dovrebbe fermarsi non appena è sicuro farlo. SIGTERM offre al processo l'opportunità di uscire con garbo ed eseguire operazioni di uscita sicure.

  • SIGHUPla maggior parte dei demoni si riavvierà quando verrà inviato SIGHUP . Viene spesso utilizzato nei processi quando sono state apportate modifiche a un file di configurazione.

  • SIGKILLpoiché SIGTERM equivale a chiedere l'arresto di un processo. Il kernel necessita di un'opzione per terminare un processo che non rispetterà le richieste. Quando un processo viene bloccato , l' opzione SIGKILL viene utilizzata per arrestare il processo in modo esplicito.

Per una lista fuori tutti i segnali che possono essere inviati con uccidere l' -l opzione può essere utilizzata -

[[email protected]]# 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

[[email protected] rdc]#

Utilizzo di SIGHUP per riavviare il sistema.

[[email protected]]# pgrep systemd 
1 
464 
500 
643 
15071

[[email protected]]# kill -HUP 1

[[email protected]]# pgrep systemd
1 
464 
500 
643 
15196 
15197 
15198

[[email protected]]#

pkillconsentirà all'amministratore di inviare un segnale kill tramite il nome del processo.

[[email protected]]# pgrep ping 
19450 
[[email protected]]# pkill -9 ping 
[[email protected]]# pgrep ping 
[[email protected]]#

killallucciderà tutti i processi. Fai attenzione a usare killall come root, poiché ucciderà tutti i processi per tutti gli utenti.

[[email protected]]# killall chrome

Comando gratuito

freeè un comando piuttosto semplice spesso utilizzato per controllare rapidamente la memoria di un sistema. Visualizza la quantità totale di memoria fisica e di swap utilizzata.

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

[[email protected]]#

bel comando

niceconsentirà a un amministratore di impostare la priorità di pianificazione di un processo in termini di utilizzo della CPU. La bellezza è fondamentalmente il modo in cui il kernel pianificherà intervalli di tempo della CPU per un processo o lavoro. Per impostazione predefinita, si presume che al processo sia concesso lo stesso accesso alle risorse della CPU.

Innanzitutto, usiamo top per verificare la correttezza dei processi attualmente in esecuzione.

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

Vogliamo concentrarci sulla colonna NICE rappresentata da NI . L'intervallo di gentilezza può essere compreso tra -20 e positivo 19. -20 rappresenta la massima priorità assegnata.

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

renice

renice ci consente di modificare la priorità corrente di un processo già in esecuzione.

renice 17 -p 30727

Il comando precedente abbasserà la priorità del nostro comando del processo ping .