Capitolul Introducere & Instalare Capitolul structura Linux Capitolul Comenzi si Editoare


Comunicatia dintre procese / Semnale



Yüklə 0,94 Mb.
səhifə16/23
tarix28.08.2018
ölçüsü0,94 Mb.
#75662
1   ...   12   13   14   15   16   17   18   19   ...   23

Comunicatia dintre procese / Semnale


In Linux si Unix procesele comunica prin doua modalitati principale:

1 Pipes (conducte)
Procesele pot comunica prin canale speciale numite pipes. Un proces trimite informatie pe acest canal care va fi folosita de celalalt proces. Sincronizarea este posibila fiindca in momentul in care un proces doreste sa citeasca dintr-o conducta goala este blocat pana cand exista date disponibile.

Example: sort < numere.txt | head 

Comanda sort ordoneaza fisierul numere.txt care reprezinta inputul sau. Outputul comenzii sort in loc sa fie redirectat catre standard output este conectat la o conducta (care exista doar pe durata executiei comenzilor) care transmite datele ca input comenzii head. Daca conducta "se umple", sort asteapta ca head sa folosesca si sa indeparteze informatia din conducta. 


Procesele pot comunica si folosind conducte de tipul named pipes sau domain named sockets.

Nota

http://www.invata-online.ro/img/course/note-symbol.gif


Exemplu de procese care folosesc sockets pentru comunicare:
Procesul server de e-mail comunica printr-un socket cu procesul antivirus si printr-un alt socket cu procesul care verifica daca un e-mail este spam. Astfel e-mailul este transmis prin socket intre aceste procese, fiecare actionand intr-un anumit mod.



2. Intreruperi software (Semnale)
O alta modalitate de comunicare dintre procese este prin semnale sau intreruperi software. Exista intreruperi software care pot fi ignorate de procese sau care nu pot fi ignorate.
Exista multe semnale in Unix (de ordinul sutelor).

Dintre acestea cateva mai importante sunt: 



Signal Name

Number

Description

SIGHUP

1

Hangup (POSIX)

SIGINT

2

Terminal interrupt (ANSI) - CTRL + C

SIGQUIT

3

Terminal quit (POSIX)

SIGILL

4

Illegal instruction (ANSI)

SIGKILL

9

Kill(can't be caught or ignored) (POSIX)

SIGALRM

14

Alarm clock (POSIX)

SIGTERM

15

Termination (ANSI)

SIGCONT

18

Continue executing, if stopped (POSIX) (bg %jobid)

SIGSTOP

19

Stop executing(can't be caught or ignored) (POSIX)

SIGTTIN

21

Background process trying to read, from TTY (POSIX) - (Ctrl + Z)

SIGTTOU

22

Background process trying to write, to TTY (POSIX)

SIGIO

29

I/O now possible (4.2 BSD)

SIGPWR

30

Power failure restart (System V)

Procesele pot ignora, bloca sau "prinde" toate semnalele cu exceptia SIGSTOP si SIGKILL. Daca un process "prinde" un semnal inseamna ca include cod care va actiona corespunzator la primirea semnalului. Daca semnalul nu este "prins" de proces, kernelul va executa actiunea default.

Pentru a trimite un semnal in mod expres unui proces se foloseste comanda kill . Aceasta primeste ca argument PID-ul procesului si tipul de semnal pe care sa-l trimita (default trimite SIGTERM(15)). SIGTERM se numeste si soft-kill iar SIGKILL se numeste hard-kill. Un proces poate ignora semnalul 15 dar nu si semnalul 9. La primirea semnalului 15 (daca nu este ignorat) sau 9 procesul trebuie sa intre in starea terminated.

Nota

http://www.invata-online.ro/img/course/note-symbol.gif


Trimiterea semnalului SIGKILL (9) lui init nu are niciun efect.

Comanda pkill primeste ca argument numele comenzii care ruleaza in procesul caruia ii va trimite semnalul.


Comanda killall se foloseste pentru a trimite semnale tuturor proceselor care ruleaza sub acelasi nume.
Diferenta intre pkill si killall este ca pkill primeste ca argument doar o parte din numele procesului, iar killall primeste ca argument intreg numele. 
Pentru a specifica semnalul trimis se poate folosi codul numeric al semnalului sau numele acestuia. 

Exemplu

http://www.invata-online.ro/img/course/note-symbol.gif


#ps -ef | grep bash

root

13162

13158

0

11:59

pts/1

00:00:00

-bash

root

13403

13400

0

12:19

pts/2

00:00:00

-bash



#kill -15 13162
sau
#kill -SIGTERM 13162
sau 
#pkill bash
sau 
#killall bash



Aplicatii:
1) sa se trimita procesului reprezentat de comanda sleep 100 semnalul corespunzator combinatiei Ctrl+Z
2) sa se trimita procesului reprezentat de comanda sleep 50 semnalul corespunzator combinatiei Ctrl+C
Nota

http://www.invata-online.ro/img/course/note-symbol.gif


Pidul unui proces care ruleaza poate fi aflat folosind comanda pidof. Exemplu: pidof init



Yüklə 0,94 Mb.

Dostları ilə paylaş:
1   ...   12   13   14   15   16   17   18   19   ...   23




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin