Indietro Indice Home PHC Avanti


Comunicazioni tra processi

I processi possono comunicare tra di loro in diversi modi, e cioè:

Una pipe è un semplice metodo per far sì che due processi possano passarsi uno stream di dati. Semplicemente un processo scrive da una parte ed un altro legge ciò che il primo scrive. I dati sono ordinati in modo che ciò che è scritto per prima viene anche letto per prima (si tratta, appunto, di una FIFO: first-in-first-out). Si ha una pipe quando si concatenano da linea di comando più comandi separati da '|'. Ad esempio:

[messina@poisson public_html $] cat *.html|tr '>' '\012'|grep \
SRC|cut -d '"' -f2
pam-censur.jpg
marchio.gif
lavoriincorso.gif
winslow.gif
email.gif
openlogo-50.jpg
penguin2.gif
Logo.jpg
[messina@poisson public_html $]

Esistono poi dei file speciali, delle fifo, appunto, che si creano con il comando mknod, e che funzionano come le pipe, ma restano su disco, in modo che i processi possano collegarsi ad essi semplicemente tramite il nome.

I segnali sono delle brevi informazioni che i processi si scambiano durante l'esecuzione, e che possono tornare molto utili in diverse occasioni, visto che esiste un programma, kill, che permette di mandare ad un particolare processo un segnale a scelta. Per sapere quanti segnali sono disponibili potete dare il comando kill -l.

[messina@poisson seminario$] kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL
 5) SIGTRAP	 6) SIGABRT	 7) SIGBUS	 8) SIGFPE
 9) SIGKILL	10) SIGUSR1	11) SIGSEGV	12) SIGUSR2
13) SIGPIPE	14) SIGALRM	15) SIGTERM	17) SIGCHLD
18) SIGCONT	19) SIGSTOP	20) SIGTSTP	21) SIGTTIN
22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO
30) SIGPWR	31) SIGSYS	
[messina@poisson seminario$]

Tramite l'opzione '-s' seguita dal nome del segnale e dal PID del processo si può mandare quel segnale a quel processo. Se non si ha lo stesso uid di quello effettivo del processo, o al limite uid=0 (che è quello dell'utente root) il segnale non ha effetto.

Di seguito un breve elenco del significato dei segnali (cfr man 7 signal)

Se volete uccidere un processo che non potete chiudere normalmente (tipico: il Netscape che si pianta o che continua a girare senza che esistano più finestre...) potete provare con il comando kill, ma se questo non ha effetto (SIGTERM può essere ignorato!), digitando kill -s sigkill seguito dal PID del processo sicuramente morirà. Ovviamente i processi in stato di zombie, come già detto, essendo già morti sono immuni a questo comando.


Antonio Messina
2000-03-17