Documente Academic
Documente Profesional
Documente Cultură
Cheat sheet
Comand
su
ps
top
pstree
|
kill
pkill
fg
&
bg
mkfifo
nohup
Descriere scurt
switch user - schimb utilizatorul n sesiunea curent
afieaz informaii despre porcesele active n sistem
afieaz informaii despre porcese n mod interactiv
ierarhia de procese
pipe
trimite un semnal unui proces identificat prin PID
caut un proces dup nume i i transmite un semnal
trece un proces n foreground
lanseaz un proces n background running
trece un proces din background din stopped n running
creaz un pipe cu nume
ruleaz o comand ce va ignora semnalul SIGHUP
Suport laborator
5. Procese
Arhiv laborator
lab05.tar.gz
Introducere
Vizualizarea proceselor din sistem
Pentru a afia informaii despre procesele active, putem utiliza ps. Fr nici un argument, listeaz
procesele deschise din terminalul curent. Apar doar dou procese: shell-ul bash i procesul ps:
student@uso:~$ ps
PID TTY
TIME CMD
3821 pts/1
00:00:00 bash
3877 pts/1
00:00:00 ps
Dac adugm argumentele -ef comenzii anterioare se vor afia toate procesele ce ruleaz n sistem:
student@uso:~$ ps -ef
UID
PID PPID C STIME TTY
root
1
0 0 19:37 ?
TIME CMD
00:00:00 /sbin/init
root
root
root
root
root
root
root
root
root
root
root
root
[...]
2
3
6
7
8
10
12
13
14
15
16
18
0
2
2
2
2
2
2
2
2
2
2
2
0
0
0
0
0
0
0
0
0
0
0
0
19:37
19:37
19:37
19:37
19:37
19:37
19:37
19:37
19:37
19:37
19:37
19:37
?
?
?
?
?
?
?
?
?
?
?
?
00:00:00
00:00:00
00:00:00
00:00:00
00:00:00
00:00:00
00:00:00
00:00:00
00:00:00
00:00:00
00:00:00
00:00:00
[kthreadd]
[ksoftirqd/0]
[migration/0]
[watchdog/0]
[migration/1]
[ksoftirqd/1]
[watchdog/1]
[cpuset]
[khelper]
[kdevtmpfs]
[netns]
[sync_supers]
Putem folosi man ps mpreun cu opiunea de cutare pentru a gsi descrierea cmpurilor afiate:
uid
UID
see euid. (alias euid).
euid
EUID
effective user ID (alias uid).
pid
PID
process ID number of the process.
ppid
PPID
parent process ID.
c
C
processor utilization. Currently, this is the integer value of
the percent usage over the lifetime of the process.
start_time START
starting time or date of the process.
tname
TTY
controlling tty (terminal).
time
TIME
cumulative CPU time, "[DD-]HH:MM:SS" format.
ucmd
CMD
see comm.
comm
COMMAND command name (only the executable name).
Informaii detaliate despre procesele care ruleaza n sistem pot afiate i folosind argumentele aux. n
acest caz argumentele comenzii ps nu sunt prefixate de caracterul -. Este cazul argumentelor date n
format BSD.
student@uso:~$ ps aux
USER
PID %CPU %MEM
root
1 0.0 0.0
root
2 0.0 0.0
root
3 0.0 0.0
root
6 0.0 0.0
root
7 0.0 0.0
root
8 0.0 0.0
root
10 0.0 0.0
root
12 0.0 0.0
root
13 0.0 0.0
root
14 0.0 0.0
root
15 0.0 0.0
root
16 0.0 0.0
root
18 0.0 0.0
root
19 0.0 0.0
root
20 0.0 0.0
root
21 0.0 0.0
root
22 0.0 0.0
VSZ
24456
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
RSS
2416
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
TTY
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
STAT
Ss
S
S
S
S
S
S
S
S<
S<
S
S<
S
S
S<
S<
S<
START
19:37
19:37
19:37
19:37
19:37
19:37
19:37
19:37
19:37
19:37
19:37
19:37
19:37
19:37
19:37
19:37
19:37
TIME
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
COMMAND
/sbin/init
[kthreadd]
[ksoftirqd/0]
[migration/0]
[watchdog/0]
[migration/1]
[ksoftirqd/1]
[watchdog/1]
[cpuset]
[khelper]
[kdevtmpfs]
[netns]
[sync_supers]
[bdi-default]
[kintegrityd]
[kblockd]
[ata_sff]
Informaiile oferite de utilitarul ps se pot filtra specificnd un set de argumente. Spre exemplu, pentru
a afia doar procesele deinute de utilizatorul student, rulm comanda:
student@uso:~$
PID TTY
2038 ?
2086 ?
2089 ?
2090 ?
2154 ?
2155 ?
2156 ?
2158 ?
2163 ?
2165 ?
2337 ?
2339 ?
ps -u student
TIME CMD
00:00:00 x-session-manag
00:00:00 ssh-agent
00:00:00 dbus-launch
00:00:01 dbus-daemon
00:00:00 start_kdeinit
00:00:00 kdeinit4
00:00:00 klauncher
00:00:04 kded4
00:00:00 bluedevil-helpe
00:00:00 obex-data-serve
00:00:00 bluedevil-monol
00:00:00 kglobalaccel
student@uso:~$ ps U student
PID TTY
STAT
TIME COMMAND
2038 ?
Ss
0:00 /bin/sh /usr/bin/x-session-manager
2086 ?
Ss
0:00 /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-withsession x-session-manager
2089 ?
S
0:00 /usr/bin/dbus-launch --exit-with-session x-sessionmanager
2090 ?
Ss
0:01 //bin/dbus-daemon --fork --print-pid 5 --print-address 7
--session
2154 ?
S
0:00 /usr/lib/kde4/libexec/start_kdeinit +kcminit_startup
2155 ?
Ss
0:00 kdeinit4: kdeinit4 Running...
2156 ?
S
0:00 kdeinit4: klauncher [kdeinit] --fd=9
2158 ?
Sl
0:04 kdeinit4: kded4 [kdeinit]
2163 ?
S
0:00 /usr/bin/bluedevil-helper
2165 ?
S
0:00 /usr/bin/obex-data-server --no-daemon
2337 ?
S
0:00 /usr/bin/bluedevil-monolithic
2339 ?
S
0:00 /usr/bin/kglobalaccel
2341 ?
Sl
0:00 /usr/bin/kwalletd
2344 ?
S
0:00 /usr/bin/kactivitymanagerd
Se recomand folosirea argumentelor cu - (n stil GNU). Cu toate acestea, n unele cazuri forma BSD
este mai potrivit.
Pipe-uri anonime
Caracterul | (pipe) este folosit pentru a nlnui 2 comenzi, legnd ieirea standard a primei comenzi la
intrarea standard a celeilalte, aa cum arat i figura urmtoare:
Folosind > i < putem face ca o comand s scrie ntr-un fiier sau s citeasc dintr-un fiier. Folosind
| fiierul nu mai este necesar.
Dup cum se poate observa din diagram, pentru a aduce un proces din background n
foreground utilizm comanda fg. Fr nici un parametru, aduce n foreground ultimul proces
trimis n background.
Pentru a vedea ce procese se afl n fundal utilizm jobs. Astfel putem afla id-ul unui job i l putem
folosi pentru a aduce n foreground job-ul respectiv.
fg $jobID
Atunci cnd utilizm & procesul pornete n background i i ncepe execuia (este n running)
iar cnd utilizm Ctrl-z acesta este stopped. Pentru a trece din stopped n running utilizm
bg.
procfs
procfs este un sistem de fiiere virtual, adic datele nu se gsesc pe un suport fizic permanent (hard
disk). Fiecare fiier ofer informaii despre sistem i este stocat fizic n RAM. procfs este montat n
/proc.
Informaii despre un proces gsim n directorul din /proc care are ca nume PID-ul procesului. Pe
Daemon
Un daemon este un tip de proces care ruleaz n background i se detaeaz de terminalul de control.
Un astfel de proces nu va accepta comenzi de la tastatur.
Putem comunica cu un daemon prin:
fiiere de configurare
semnale
De obicei, procesele care sunt daemoni au numele terminat n d (sshd), dar nu este o regul.
Pachetele ce conin daemoni de obicei au script-uri de control, localizate n /etc/init.d/. Acestea
sunt folosite pentru pornire/oprire i accept un argument dintre:
start
stop
restart
Semnale
Unul din mecanismele prin care se poate comunica ntre procese sunt semnalele. Un utilizator poate
trimite un semnal unui proces folosind comanda kill.
Pentru a vedea toate semnalele care se pot trimite unui proces utilizm kill -l.
student@uso:~$ kill
1) SIGHUP
2)
6) SIGABRT
7)
11) SIGSEGV
12)
16) SIGSTKFLT
17)
21) SIGTTIN
22)
26) SIGVTALRM
27)
31) SIGSYS
34)
38) SIGRTMIN+4 39)
43) SIGRTMIN+9 44)
48) SIGRTMIN+14 49)
53) SIGRTMAX-11 54)
58) SIGRTMAX-6 59)
63) SIGRTMAX-1 64)
-l
SIGINT
SIGBUS
SIGUSR2
SIGCHLD
SIGTTOU
SIGPROF
SIGRTMIN
SIGRTMIN+5
SIGRTMIN+10
SIGRTMIN+15
SIGRTMAX-10
SIGRTMAX-5
SIGRTMAX
3)
8)
13)
18)
23)
28)
35)
40)
45)
50)
55)
60)
SIGQUIT
SIGFPE
SIGPIPE
SIGCONT
SIGURG
SIGWINCH
SIGRTMIN+1
SIGRTMIN+6
SIGRTMIN+11
SIGRTMAX-14
SIGRTMAX-9
SIGRTMAX-4
4)
9)
14)
19)
24)
29)
36)
41)
46)
51)
56)
61)
SIGILL
SIGKILL
SIGALRM
SIGSTOP
SIGXCPU
SIGIO
SIGRTMIN+2
SIGRTMIN+7
SIGRTMIN+12
SIGRTMAX-13
SIGRTMAX-8
SIGRTMAX-3
5)
10)
15)
20)
25)
30)
37)
42)
47)
52)
57)
62)
SIGTRAP
SIGUSR1
SIGTERM
SIGTSTP
SIGXFSZ
SIGPWR
SIGRTMIN+3
SIGRTMIN+8
SIGRTMIN+13
SIGRTMAX-12
SIGRTMAX-7
SIGRTMAX-2
Ctrl-c SIGINT
Ctrl-z SIGTSTP
Ctrl-\ SIGQUIT
Exerciii
1. ps
Analizai procesele care ruleaz n sistem folosind ps.
Afiai procesele care au fost deschise din terminalul curent.
Rezolvare
student@uso:~$ ps
Afiai toate procesele care ruleaz n sistem. Folosii man ps (sau seciunea Introducere)
pentru a gsi parametrii corespunztori. ncercai s gsii mai multe soluii.
Rezolvare
student@uso:~$ ps -ef
student@uso:~$ ps aux
2. top
Utilitarul ps poate fi folosit pentru a face o poz proceselor sistemului la un anumit moment de timp.
Pentru a vizualiza informaii n timp real, folosim top.
Rulai comanda
student@uso:~$ top
Dac tastai h n timp ce top ruleaz, se afieaz un ecran informativ in care sunt listate
comenzile interactive acceptate de top. De exemplu, dac tastai u putei selecta interactiv ce
utilizatori s fie afiai.
Pornii o instan nou de top i afiai procesele utilizatorului root.
3. Ierarhia de procese
Utilitarul pstree afieaz sub form arborescent toate procesele existente n momentul
lansrii lui. Utiliznd
student@uso:~$ pstree
4. Timpul de execuie
Pentru a afla ct timp a rulat un anumit proces, se poate folosi comanda time.
Rulai
student@uso:~$ time sleep 3
Output-ul comenzii time conine trei valori de timp: real, user, sys.
Folosii pagina de man pentru a afla ce reprezinta fiecare valoare.
To run the command `ls -Fs' and show just the user, system, and total time:
time -f "%E real,%U user,%S sys" ls -Fs
[...]
E
Elapsed real (wall clock) time used by the process, in
[hours:]minutes:seconds.
U
Total number of CPU-seconds that the process used directly (in user mode),
in seconds.
S
Total number of CPU-seconds used by the system on behalf of the process (in
kernel mode), in seconds.
cazul nostru?
Fiierul cmdline conine linia de comand folsoit pentru lansarea n execuie a
procesului. Verificai coninutul fiierului folosind cat.
Folderul fd conine legturi simbolice ctre descriptorii de fiier folosii de proces.
Primii 3 descriptori sunt cei standard (0: stdin, 1: stdout, 2: stderr).
nchidei sesiunea de vim deschis anterior. Revenii n terminalul n care ai vizualizat structura
lui procfs. Listai coninutul directorului. Ce observai?
6. uptime
Rulai comanda uptime. Folosind pagina de man a utilitarului, identificai ce reprezint cele
trei numere de la load average.
student@uso:~$ man uptime
[...]
uptime gives a one line display of the following information. The current time,
how long the system has been running, how many users are currently logged on, and
the system load averages for the past 1, 5, and 15 minutes.
7. Pipe-uri anonime
n directorul ~ creai un director numit 1960s, i n el creai fiierele urmtoare:
student@uso:~/1960s$ touch Ticket-to-Ride_TheBeatles.txt Yesterday_TheBeatles.txt
Penny-Lane_TheBeatles.txt
student@uso:~/1960s$ touch Satisfaction_RollingStones Brown-Sugar_RollingStones
Wild-Horses_RollingStones Play-With-Fire_RollingStones
student@uso:~/1960s$ touch Hey-Jude_TheBeatles
student@uso:~/1960s$ touch Rainy-Day-Women_BobDylan
Ce observai?
tergei fiierul temp_file
Comanda grep citete fiierul primit ca parametru i afieaz doar liniile ce se potrivesc cu un anumit
ablon. Mai multe detalii ntr-un laborator ulterior.
Folosii pipe-uri anonime pentru a obine acelai rezultat. Hint: |.
Rezolvare
student@uso:~/1960s$ ls -l | grep TheBeatles
Rulai comanda
student@uso:~/1960s$ ls -l | cat | cat | cat | cat | cat | cat
8. Semnale
Utilizai kill -l pentru a vedea toate semnalele care se pot trimite unui proces.
Facei programul signal_test din arhiva de laborator executabil i rulai-l:
student@uso:~$ chmod +x signal_test
student@uso:~$ ./signal_test
Deschidei un alt terminal i aflai PID-ul procesului creat anterior. Folosii pidof. Alternativ,
putei folosi comanda pgrep.
Din cel de-al doilea terminal, trimitei 5 semnale diferite (nu trimitei -9, SIGKILL) procesului
creat. Utilizai att kill ct i pkill.
Ce semnal transmite pkill dac nu este nici unul precizat explicit?
n terminalul n care programul signal_test ruleaz, tastai, pe rnd combinaiile de taste
urmtoare i observai ce semnale se trimit:
CTRL-Z
CTRL-C
CTRL-\
La final, pentru a opri procesul signal_test, rulai comanda:
student@uso:~$ kill -9 $(pidof signal_test)
9. xkill
Pentru a fora nchiderea unei aplicaii grafice se poate folosi comanda xkill.
Din interfaa grafic deschidei gedit
Deschidei un terminal. Tastai comanda xkill.
n terminal a aprut mesajul:
Select the window whose client you wish to kill with button 1
Nu intrai n panic, rolul fiierului /dev/random este acela de a genera octei aleatori. Este normal
s vedei caractere ciudate.
Pe ecran vor fi afiate caractere random. Trimitei procesul n fundal utiliznd semnalul SIGSTOP
(Ctrl-Z).
Observai c procesul a fost trecut n starea Stopped. Folositi ps pentru a vedea ca procesul
apare n output.
Trimitei semnalul SIGKILL utiliznd kill procesului cat din background folosind kill
fr a scrie explicit pid-ul procesului.
$! este PID-ul ultimului proces aflat n background.
Rezolvare
student@uso:~$ kill -9 $!
12. htop
Instalai pachetul htop folosind apt-get (aducei-v aminte din laboratorul 2 cum instalai pachete).
Deschidei o instan de vim.
ntr-un alt terminal, rulai comanda
student@uso:~$ htop
Observai c informaiile afiate sunt cele din top dar interfaa este mult mai uor de folosit.
Afiai detalii despre procesul vim, detalii referitoare la fiierele deschise i la zonele de memorie
folosite (folosii tasta l)
Rezolvare
Selectm procesul i tastm l
ps -e | grep bash
echo $$
echo $PPID
ps -e | grep $PID #replace $PID cu cel obinut anterior
16. pgrep
Deschidei editorul vi.
ntr-un alt terminal, folosii comanda pgrep pentru a afia numele i pid-ul tuturor proceselor vi din
sistem.
Cutai parametrul -l n man pgrep i folosii-l pentru a completa lista de PID-uri obinut anterior
cu date despre numele proceselor.
Cum ai putea afia doar procesele vi, fr a afia i procesele ale cror nume conin grupul de litere
vi? Cutai n man dup exactly.
17. Daemon
Rulai programul signal_test din arhiv astfel:
student@uso:~$ ./signal_test 42
Programul creeaz un daemon. Folosii un procedeu pentru a afla PID-ul procesului creat.
Rezolvare
student@uso:~$ pgrep signal_test
18. Nohup
Pornii un proces folosind comanda ping -c 10000 google.com ntr-un terminal.
nchidei acest terminal i verificai (folosind ps i htop) dac procesul ping mai exist.
Rezolvare
student@uso:~$ ping -c 10000 google.com
#Alt-F4 (Enter)
student@uso:~$ ps -e | grep ping
student@uso:~$ htop # cutam ping n output
ncercai acelai lucru i trimind procesul ping n background prin folosirea &.
Rezolvare
student@uso:~$ ping -c 10000 google.com &
# Alt-F4 (Enter)
student@uso:~$ ps -e | grep ping
student@uso:~$ htop # cutam ping n output i nu-l gsim
ncercai i folosind nohup, trimind procesul n background prin & (nohup ping -c 10000
google.com &)
Rezolvare
Folosirea nohup mpreun cu & permite pornirea de procese ce nu vor fi terminate n momentul
ncheierii sesiunii curente.
19. disown
Rulai comanda ping 8.8.8.8 > /dev/null &. Procesul este rulat n background.
nchidei acest terminal i verificai (folosind ps i htop) dac procesul mai exist.
Rezolvare
student@uso:~$ ping 8.8.8.8 > /dev/null &
# close terminal
student@uso:~$ ps -e | grep ping
Deschidei un alt terminal i rulai din nou ping 8.8.8.8 > /dev/null &. Procesul ruleaz n
background.
Aflati pid-ul procesului ping i folosii disown mpreun cu pid-ul descoperit anterior, apoi nchidei
terminal-ul.
Ce se ntmpl cu procesul?
Rezolvare
student@uso:~$ ping 8.8.8.8 > /dev/null &
disown $(pidof ping)
# close terminal
student@uso:~$ ps -e | grep ping
disown este o comand built-in a shell-ului care face ca un proces s nu se termine n momentul
ncheierii sesiunii curente.
21. Screen
Instalai pachetul screen. Folosii-l pentru a rula, n paralel, pagina de manual a programului
screen, o instan de vim i procesul corespunztor comenzii ping google.com.
Utiliznd pagina de manual, determinai combinaia de taste necesar pentru a prsi screen fr a
opri procesele care ruleaz.
Pentru a verifica, conectai-v la sesiunea anterioar de screen.
Rezolvare
Control-A Control-C creeaz o fereastr nou
Control-A numr navigheaz la fereastra numr
Control-A Control-D detaeaz screen
Resume la o sesiune se face cu screen -r