Demo

Vizualizarea proceselor din sistem (ps, pstree, top, htop)

Folosind ps fără nici un parametru vizualizăm procesele din shell-ul curent asociate utilizatorului curent.

student@uso:~$ ps
  PID TTY          TIME CMD
22101 pts/0    00:00:00 bash
22209 pts/0    00:00:00 ps

Tot cu ps putem vizualiza un snapshot al tuturor proceselor. Aceasta se poate obține folosind două variante ale comenzii:

student@uso:~$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3 160140  7044 ?        Ss   10:39   0:02 /sbin/init spla
root         2  0.0  0.0      0     0 ?        S    10:39   0:00 [kthreadd]
[...]
student  22101  0.0  0.2  31236  5192 pts/0    Ss   19:38   0:00 bash
student  22114  0.0  0.2  31236  5008 pts/1    Ss+  19:38   0:00 bash
root     22151  0.0  0.3  25656  6260 ?        S    19:40   0:00 /sbin/dhclient 
student  22191  0.0  0.1  46012  3656 pts/0    R+   19:48   0:00 ps aux

Un utilitar echivalent lui Windows Task Manager pentru vizualizarea în timp real a proceselor care rulează, în linie de comandă, este htop.

student@uso:~$ htop

Atributele unui proces

În mod implicit, când afișăm procesele, ni se arată următoarele atribute:

student@uso:~$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
[...]

Putem specifica ce atribute să ne afișeze și în ce ordine dorim:

student@uso:~$ ps -ax -o ppid,pid,cmd
 PPID   PID CMD
    0     1 /sbin/init splash
    0     2 [kthreadd]
[...]

Pentru a selecta doar procesele pornite de utilizatorul student:

student@uso:~$ ps -f -u student
UID        PID  PPID  C STIME TTY          TIME CMD
student    900     1  0 11:10 ?        00:00:00 /lib/systemd/systemd --user
student    901   900  0 11:10 ?        00:00:00 (sd-pam)
[...]

Foreground & Background (&, fg, bg, jobs)

Vom folosi ca exemplu utilitarul sleep. Trebuie să știm dacă procesul nostru rulează sau nu. Pentru a verifica acest lucru, dintr-un alt terminal, ne folosim de utilitarul ps:

Terminal 1:

student@uso:~$ sleep 100

Terminal 2:

student@uso:~$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3 160140  7044 ?        Ss   10:39   0:02 /sbin/init spla
root         2  0.0  0.0      0     0 ?        S    10:39   0:00 [kthreadd]
[...]
student  22268  0.0  0.0  16116   884 pts/0    S    19:54   0:00 sleep 100
student  22281  0.0  0.1  46012  3744 pts/0    R+   19:54   0:00 ps aux

Am găsit procesul sleep în sistem. Putem folosi utilitarul pgrep pentru a afla PID-ul procesului.

student@uso:~$ pgrep sleep
22268

Pentru a opri procesul, vom folosi combinația de taste Ctrl+Z:

student@uso:~$ sleep 100
student@uso:~$ ^Z
[1]+  Stopped                 sleep 100
student@uso:~$ jobs
[1]+  Stopped                 sleep 100

Am folosit utilitarul jobs pentru a vedea ce procese sunt active în terminalul curent. De aici putem folosi bg (background) pentru a porni procesul în mod interactiv sau fg (foreground) pentru a porni procesul în mod neinteractiv. Mai simplu, la bg putem da alte comenzi în timp ce programul nostru rulează, iar la fg nu putem să dăm alte comenzi.

Semnale (kill)

Vom folosi în continuare comanda kill pentru a trimite semnale proceselor. Această comandă nu omoară neapărat procesul, în ciuda numelui.

student@uso:~$ kill --help
kill: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
    Send a signal to a job.

Dintr-un alt terminal aflăm PID-ul procesului sleep folosind utilitarul pgrep. Pentru a termina procesul, trimitem semnalul 9 (SIGKILL):

student@uso:~$ jobs
[1]+  Stopped                 sleep 100
student@uso:~$ pgrep sleep
22286
student@uso:~$ kill -9 22286
student@uso:~$ jobs
[1]+  Killed                  sleep 100

Am transmis semnalul 9 (SIGKILL) procesului 22286, iar acesta a fost terminat instant.

Redirectare

Pentru a redirecta lista proceselor într-un fișier, folosim următoarea comandă:

student@uso:~$ ps aux > procese.txt

Astfel, am specificat procesului să nu mai afișeze rezultatul pe ecran, ci într-un fișier. Diferența între > și » este că primul înlocuiește conținutul fișierului procese.txt, pe când al2lea adaugă la sfârșitul fișierului. Astfel, executând a2a oară comanda:

student@uso:~$ ps aux >> procese.txt

Vom avea în fișierul procese.txt afișat de 2 ori ieșirea comenzii.

Comunicare interprocese, folosind |

Operatorul | este foarte important și uzual folosit. Acesta ia rezultatul primei comenzi și îl oferă ca intrare la a doua comandă. Câteva exemple:

student@uso:~$ ps aux | grep sleep
student  22406  0.0  0.0  16116   828 pts/0    S    20:28   0:00 sleep 1000
student  22408  0.0  0.0  23076  1084 pts/0    S+   20:28   0:00 grep --color=auto sleep
student@uso:~$ tree | grep Documents
├── Documents
uso/laboratoare/new/02-process/demo.txt · Last modified: 2019/10/10 16:21 by iuliana.brinzoi
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0