Sunteți pe pagina 1din 16

Laborator 05 - Procese; semnale; pipe-uri

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]

Consultnd man, observm:


-e
-f

Select all processes. Identical to -A.


Do full-format listing.

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]

Exist 3 formate pentru opiunile unei comenzi:


formatul lung (de exemplu --help)
formatul GNU (ca n ls -l)
formatul BSD (ps aux)
Putem vedea semnificaia argumentelor mai des folosite pentru ps, n toate cele 3 formate, rulnd
ps --help

sau o comand cu un argument nevalid.


student@uso:~$ ps --help
********* simple selection ********* ********* selection by list *********
-A all processes
-C by command name
-N negate selection
-G by real group ID (supports names)
-a all w/ tty except session leaders -U by real user ID (supports names)
-d all except session leaders
-g by session OR by effective group name
-e all processes
-p by process ID
T all processes on this terminal
-s processes in the sessions given
a all w/ tty, including other users -t by tty
g OBSOLETE -- DO NOT USE
-u by effective user ID (supports names)
r only running processes
U processes for specified users
x processes w/o controlling ttys
t by tty
*********** output format ********** *********** long options ***********
-o,o user-defined -f full
--Group --User --pid --cols --ppid
-j,j job control
s signal
--group --user --sid --rows --info
-O,O preloaded -o v virtual memory --cumulative --format --deselect
-l,l long
u user-oriented
--sort --tty --forest --version
-F
extra full
X registers
--heading --no-heading --context
********* misc options *********
-V,V show version
L list format codes f ASCII art forest
-m,m,-L,-T,H threads
S children in sum
-y change -l format
-M,Z security data
c true command name -c scheduling class
-w,w wide output
n numeric WCHAN,UID -H process hierarchy

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

Alternativ putem rula i

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.

Foreground & Background


Diagrama urmtoare arat strile n care se poate afla un proces i cum se trece dintr-o stare n alta.

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

Unde $jobId se va nlocui cu ID-ul job-ului respectiv.


Pentru a porni un proces direct n background, folosim &. De exemplu, pentru a deschide fiierul
beatles utiliznd vim direct n background folosim:
vim beatles &

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

scurt, cteva dintre acestea:

exe - link ctre executabilul ce a creat procesul


cmdline - comanda utilizat pentru crearea procesului
fd - fiierele deschise
maps - zonele de memorie ale procesului

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

Putem transmite anumite semnale utiliznd combinaii de taste. De exemplu:

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

Ce reprezint fiecare cmp din output? Folosii man pentru a afla.


Afiai doar procesele lansate de utilizatorul student. Folosii man ps sau --help pentru a
afla argumentele corespunztoare.

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

Se vor afia primele procese sortate dup gradul de folosire al procesorului.


Parametrii acestei comenzi sunt similari comenzii ps. Folosii top pentru a lista doar procesele
utilizatorului student.
Rezolvare
student@uso:~$ top -u student

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

identificai primul proces creat la lansarea sistemului de operare (rdcina arborelui).


Identificai PID-ul acestui proces folosind ps. Folosii argumentul -C pentru a specifica numele
executabilului init.

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.

5. Sistemul de fiiere procfs


Deschidei cu editorul vim un fiier nou numit beatles. Scriei we all live in a yellow
submarine n fisier i salvai fiierul. Nu iesii din vim.
ntr-un alt terminal, folosii ps pentru a identifica PID-ul procesului vim pornit. Hint: Folosii
argumentul -C al utilitarului ps.
Rulai comanda cd /proc/$PID (nlocuii $PID cu PID-ul gsit anterior). Listai coninutul
directorului n care v aflai.
Link-ul exe pointeaz ctre executabilul ce a creat procesul. Care este acesta pentru

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.

Facei fiierul uptime_ex din arhiva de laborator executabil i rulail astfel:


student@uso:~/Downloads/lab05$ chmod +x uptime_ex
student@uso:~/Downloads/lab05$ ./uptime_ex

Execuia acestuia durez cteva secunde. n timp ce executabilul uptime_ex ruleaz,


executai ntr-un terminal separat comanda uptime de cteva ori la rnd.
Cum variaz valorile numerice de load? Ce credei c face programul?

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

Ne intereseaz drepturile fiierelor ce conin TheBeatles n nume.


Deplasai-v n directorul nou creat (1960)
Creai un fiier numit temp_file ce conine output-ul comenzii ls -l. Hint: folosii
redirectri.
Rulai urmtoarea comand
student@uso:~/1960s$ grep TheBeatles temp_file

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

Cte fiiere ar fi fost necesare dac nu foloseam pipe-uri?

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)

Observai c semnalul 9 (SIGKILL) nu poate fi tratat de nici o aplicaie.

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

Ce form are mouse-ul?


Dai click undeva n interiorul ferestrei gedit.

10. fg. Operatorul &.


Utiliznd vim, deschidei fiierul TheBeatles:
vim TheBeatles

Scriei textul John Lennon n fiier.


Tastai Ctrl-Z. Procesul este trimis n background. Dac nu v amintii, putei folosi
signal_test pentru a vedea ce semnal transmite Ctrl-Z.
Folosii ps n acelai terminal pentru a lista procesele pornite n cadrul terminalului
Procesul vim se afl n background. Revenii la el. Hint: fg
Trimitei-l din nou n fundal (Ctrl-Z). Pornii un alt proces vim, direct n fundal cu
vim &

Folosii jobs pentru a vedea toate procesele care se afl n fundal.


Aducei napoi n foreground prima instan de vim deschis.

11. bg. Variabila $!


Rulai comanda
student@uso:~$ cat /dev/random

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.

Aducei procesul n starea running fr a l aduce n foreground.


student@uso:~$ bg

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

13. less. more


Folosind ps i listarea tuturor proceselor, determinai PID-ul procesului gnome-panel.
NU folosii scroll sau parametrul -C. Folosii less sau more pentru a prelucra outputul ps. Apsai
q pentru a prsi less.
Observai c less permite operaii mai avansate dect more. Se spune frecvent c less is more
Rezolvare
student@uso:~$ ps -e | less

14. Pipe-uri cu nume


Un tip special de fiiere unix sunt pipe-urile cu nume. Acestea au o reprezentare fizic pe disc.
Creai un pipe cu numele twitter:
student@uso:~$ mkfifo twitter

Listai n format lung informaii despre acest fiier. Ce observai?


Scriei mesajul USO rU1z n fiierul twitter, folosind echo.
Deschidei un alt terminal i afiai coninutul fiierului twitter folosind cat. Ce observai?
ncercai s afiai din nou coninutul fiierului.
Ce se ntmpl dac revenim n primul terminal i ncercm s scriem un nou mesaj n fiier?
Rezolvare
Terminal 1
Terminal 2
ls -l twitter
echo USO rU1z > twitter
cat twitter
cat twitter
echo It works! > twitter

15. Find out PIDs


Folosii ps i grep pentru a afla PID-ul terminalului curent.
Ce se ntmpl dac avei mai multe sesiuni deschise?
$$ este o variabil de mediu special care conine PID-ul procesului curent.
Determinai PID-ul terminalului curent.
Determinai PID-ul procesului printe. (folosii variabila de mediu $PPID)
Aflai numele procesului printe. (ps i grep)
Rezolvare
student@uso:~$
student@uso:~$
student@uso:~$
student@uso:~$

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

Singura modalitate de a interaciona cu acesta, o dat ce a fost pornit, o reprezint semnalele.


Navigai ctre directorul din /proc corespunztor procesului. Listai filedescriptorii deschii
de proces, n format lung. Ce observai?
Rezolvare
student@uso:~$ cd /proc/$(pgrep signal_test)
student@uso:/proc/<pid>$ ls -l fd

Instalai pachetul apache2.


Verificai c exist un proces apache2 care ruleaz. Acesta este un exemplu de daemon al unui server
web. Ce utilizator deine procesul apache?
apache2 se instaleaz mpreun cu un script care permite interaciunea facila cu acesta. Folosind
/etc/init.d/apache2 mpreun cu argumentul stop oprii procesul apache. Acest script trimite
un semnal daemonului Apache. Ca rezultat, daemonul se va nchide. Din contul crui utilizator trebuie
trimis semnalul?
Rezolvare

student@uso:~$ sudo apt-get install apache2


student@uso:~$ ps -e | grep apache2
student@uso:~$ sudo /etc/init.d/apache2 stop

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

student@uso:~$ nohup ping -c 10000 google.com &


# Alt-F4 (Enter)
student@uso:~$ ps -e | grep ping
student@uso:~$ htop # cutam ping n output i l gsim

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.

20. Procese orfan


Demonstrai, pornind procese i trimind semnalele corespunztoare, c dac terminm printele unui
proces, atunci copii lui sunt preluai de procesul init.
Hint: pornii un xterm din interiorul altui xterm pornit din terminal i terminai primul xterm
pornit.
Putei folosi pstree pentru vizualizare rapid sau ps afind i PPID.
Rezolvare
0$ xterm
1$ xterm

Se nchide primul xterm pornit.


2$ ps -eo cmd,pid,ppid | grep xterm

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

S-ar putea să vă placă și