Acțiunile sunt executate la nivelul sistemului de fișiere prin procese. Rularea unei comenzi înseamnă crearea unui proces în sistemul de operare, proces care execută acțiunea indicată de executabilul din care a luat naștere. Procesele sunt entități active care consumă resurse la nivelul sistemului de operare, cele mai importante fiind procesor, memorie și diverse forme de input/output.
ps
\time
vs time
killall
vs pkill
ps
, pstree
, top
, htop
, /proc
, pidof
kill
, pkill
, pgrep
time
, lsof
tmux
Pentru a afla informații despre procese se poate folosi utilitarul ps
.
Pentru a afișa toate procesele ce rulează în respectivul moment, rulați comanda:
ps -e
Observați ce informații furnizează rularea numai cu acest parametru (capul de tabel).
Selecția se poate face după o serie de criterii (utilizatorul ce deține procesul, comanda cu care acest a fost lansat, PID etc.). Pentru a selecta doar procesele ce aparțin utilizatorului student
, executați comanda:
ps -u student
Rulați comanda:
ps -e -F
Observați în ce mod s-a modificat capul tabelului.
Se poate alege ce câmpuri să fie afișate (PID, utilizator, comandă, memorie ocupată etc.). Pentru a afișa PID-ul, utilizatorul, procentul din memorie utilizat și comanda cu care a fost lansat un proces, rulați comanda:
ps -e -o pid,user,%mem,cmd
Opțiunile de selecție se pot combina cu cele de formatare. De exemplu, pentru a afișa PID-ul și memoria ocupată de procesul cu PID-ul 1, executați:
ps -p 1 -o pid,%mem
Lista se poate sorta după un criteriu dat. De exemplu, putem sorta ascendent lista tuturor proceselor din sistem după PID:
ps -A -o pid,%mem --sort +pid
Pentru a sorta descendent se pune -
(minus) în loc de +
(plus) în fața criteriului de sortare.
Deschideți o instanță de editor emacs
.
Aflați PID-ul acestuia și, din alt terminal, opriți procesul:
kill -SIGSTOP PID
Această comandă are același efect ca și combinația de taste Ctrl + z
. Pentru a termina complet procesul, se pot folosi semnalele SIGTERM
sau SIGKILL
.
Obțineți o listare arborescentă a proceselor folosind comanda pstree
și apoi obţineţi o listare similară arborescentă) folosind comanda ps
.
ps
.
Afișați procesele care nu aparțin utilizatorului student
.
ps
.
Afișați pentru toate procesele următoarele atribute: PID, comanda cu care a fost lansat, niceness, PID-ul părinteluiși sortați descendent lista după PID-ul părintelui.
ps
secțiunea STANDARD FORMAT SPECIFIERS.
Verificați faptul că procesul init
(PID-ul 1) adoptă procesele orfane. Deschideți un nou terminal și din acesta porniți o instanță de xterm
în background. Din instanța de xterm
, porniți o a doua instanță de xterm
în background. Din terminal afișați lista proceselor în format arborscent, afișând și PID-ul fiecărui proces.
pstree
.
Identificați PID-ul primei sesiuni de xterm
și trimiteți procesului respectiv semnalul SIGKILL. Identificați procesul părinte al celei de-a doua sesiuni de xterm
.
Folosiți comanda free
pentru a obține detalii despre memoria ocupată.
free
poate fi folosit și ca un utilitar pentru monitorizarea continuă a stării memoriei. Identificați un parametru care produce output o dată la 2 secunde.
Folosiți comanda uptime
pentru a determina de cât timp funcționează sistemul. Identificați aceleași valori cu ajutorul comenzii top
.
Să se afișeze toate fișierele dechise de procesul bash
pornit de utilizatorul student.
Pentru procesele de mai sus afișați PID-ul, comanda completă (cale completă cu parametri), timpul de rulare pe procesor, memoria RAM consumată (RSS – resident set size). Pentru a selecta doar anumite atribute ale unui proces folosiți comanda ps
cu parametrul -o
urmat de opțiunile specifice.
ps
secțiunea STANDARD FORMAT SPECIFIERS
.
Afișați cele mai consumatoare de memorie 5 procese din sistem care nu aparțin utilizatorului root
.
Pentru afișarea de mai sus, folosiți opțiunea de ascundere a header-ului în afișarea comenzii ps
.
Folosiți comanda uptime
pentru a determina de cât timp funcționează sistemul. Identificați aceleași valori cu ajutorul comenzii top
.
Comanda lsof
afișează descriptorii de fișier ai unui proces. Rularea acesteia fără niciun argumente afișează o listă de fișiere care aparține tuturor proceselor deschise:
lsof
Pentru a lista procesele care au deschis fișiere dintr-un anumit director:
lsof +D /dev/
Pentru a lista procesele pornite de un anumit utilizator:
lsof -u "student"
Pentru a lista procesele care încep cu un string:
lsof -c "ssh"
Vizualizarea descriptorilor de fișier folosind comanda lsof
pentru procesul sleep
din fiecare din comenzile de mai jos
sleep 30 > a.txt sleep 30 < a.txt sleep 30 < a.txt > b.txt 2> c.txt cat | sleep 30 | cat
Pornire proces emacs
și folosire Ctrl+z
și bg
pentru rulare în background.
Pornire proces emacs
direct în background.
Dorim să lucrăm cu grupuri de procese care țin de un utilizator.
Pe un tab nou de terminal adăugăm utilizatorul ana
folosind comenzile
$ sudo su # adduser ana [...] # exit # sau puteti folosi combinatia de taste Ctrl+d $
În acel tab nou ne autentificăm ca utilizatorul ana
folosind comanda
$ su - ana
În cel nou tab, din contul utilizatorului ana
, porniți în background mai multe procese: sleep
, emacs
, gedit
.
Din primul tab, folosiți, ca root
, pkill
pentru o încheia execuția proceselor utilizatorului ana
; adică rulați sudo pkill …
(cu ce opțiuni sunt utile). Este posibil să fie necesar să folosiți semnalul SIGKILL
ca să fie garantată încheierea execuției.
Pe un tab nou de terminal porniți în background procese ca utilizatorul root
, student
și ana
.
În acel tab aflăm care este identificatorul terminalului curent folosind comanda
$ tty
Din primul tab, folosiți, ca root
, pkill
pentru o încheia execuția proceselor de pe al doilea terminal; adică rulați sudo pkill ...
(cu ce opțiuni sunt utile). Este posibil să fie necesar să folosiți semnalul SIGKILL
ca să fie garantată încheierea execuției.
Porniți într-un ecran tmux
un tracker BitTorrent, un server HTTP Python, un editor Vim sau Emacs și încă un ecran pentru comenzi.
tmux
folosiți comanda
tmux
Pentru a deschide ecrane noi în tmux
folosiți combinația de taste Ctrl+b
și apoi separat c
. Pentru a tranzita între ferestre folosiți combinațiile de taste Ctrl+b
urmat de n
și Ctrl+b
urmat de p
. Pentru a închide un ecran închideți shell-ul folosind Ctrl+d
sau exit
sau logout
.
Pentru a vă detașa de tmux
folosiți combinația de taste Ctrl+b
urmat de d
. Pentru a vă reatașa la tmux
folosiți comanda
tmux attach
python -m SimpleHTTPServer
Ca utilizatorul student și folosind sudo
, echo
scrieți valoarea 1
în fișierul /proc/sys/net/ipv4/ip_forward
. Trebuie să folosiți tee
. Gândiți-vă cum construiți comanda.
Pentru a afișa fișierele deschise de comanda ls -l
folosiți construcția
strace -e open ls -l
Redirectați ieșirea standard a comenzii (standard output) comenzii în fișierul ls.out
iar ieșirea de eroare standard a comenzii (standard error) în fișierul strace.err
.
strace
menține ieșirea comenzii rulate la standard output în vreme ce output-ul său este furnizat la standard error.
În mod similar comenzii strace
comanda time
măsoară timpul de rulare a unei comenzi și alte informații. Pentru a rula comanda time
din sistem (există și o comandă time
internă shell-ului), folosiți construcția
/usr/bin/time -v pidof bash
Comanda de mai sus afișează informații legate de rularea comenzii pidof bash
.
Redirectați ieșirea standard a comenzii (standard output) comenzii în fișierul pidof.out
iar ieșirea de eroare standard a comenzii (standard error) în fișierul time.err
.