Crea sito

I segnali

11 / 100

Benchè i processi siano di norma entita separate e completamente indipendenti fra di loro, esistono molti casi in cui e necessaria una qualche forma di comunicazione.

La forma più elementare di comunicazione fra processi e costituita dai segnali, che sono usati anche direttamente dal kernel per comunicare ai processi una serie di eventi o errori (come l’uso inappropriato della memoria o una eccezione aritmetica).

Come dice la parola un segnale e una specie di avviso che viene inviato ad un processo; e non contiene nessuna informazione oltre al fatto di essere stato inviato. In genere i segnali vengono utilizzati per noti care ai processi una serie di eventi, e possono essere anche inviati a mano attraverso l’uso del comando kill.

Ciascun segnale e identi cato da un numero e da un nome simbolico; la lista dei segnali disponibili puo essere ottenuta semplicemente con:

Tipici segnali che causano una semplice uscita sono SIGTERM, il default del comando kill, e SIGINT che e associato al carattere di interruzione dato dalla tastiera un segnale che invece produce un core dump e SIGQUIT, cos come tutti i segnali relativi ad errori di programmazione come SIGSEGV, SIGFPE, ecc. Segnali come SIGSTOP e SIGTSTP invece hanno come e etto quello di fermare l’esecuzione di un programma, mandandolo in stato T.

In generale il comando kill permette di inviare un segnale ad un processo qualunque, spe-ci cando come parametro il PID di quest’ultimo. Come accennato il segnale inviato di default e SIGTERM, ma si puo inviare qualunque altro segnale speci candone numero o nome preceduto da un \” come opzione; ad esempio:

kill -9 1029

kill -SIGKILL 1029

kill -KILL 1029

kill -s SIGKILL 1029 sono modalità equivalenti di inviare il segnale SIGKILL al processo con PID 1029. Oltre a -s e -l il comando kill accetta le opzioni -L (sinonimo di -l) e -V che ne stampa la versione.

Un comando alternativo a kill, e piu facile da usare, e killall che invece di richiedere un numero di PID funziona indicando il nome del programma, ed invia il segnale (speci cato con la stessa sintassi di kill) a tutti i processi attivi con quel nome. Le opzioni principali disponibili sono riportate in tab. 1.13. Al solito la documentazione completa e nella pagina di manuale, accessibile con man killall.

Opzione Significato
   
-g invia il segnale al process group del processo.
-e richiede una corrispondenza esatta anche per nomi molto
  lunghi (il comando controlla solo i primi 15 caratteri).
-i chiede una conferma interattiva prima di inviare il segnale.
-l stampa la lista dei nomi dei segnali.
-u user manda il segnale ai processi dell’utente user.
-w attende la terminazione di tutti i processi cui ha inviato il
  segnale.

Altri due comandi ancora piu so sticati per la gestione dei segnali e l’identificazione dei processi, sono pgrep e pkill (in realt il secondo e una modalit alternativa di chiamare il primo). Con pgrep infatti e possibile selezionare gruppi di processi, cui eventualmente inviare, se invocato come pkill, un segnale che di default e SIGTERM ma che puo essere uno qualunque, da indicare con la stessa sintassi di kill.

La ricerca puo essere ristretta ad una corrispondenza esatta usando l’opzione -x o estesa all’intera riga di comando con cui e stato lanciato il processo con -f. Si puo anche invertire la selezione con -v, prendendo tutti i processi che non corrispondono.

OpzioneSigni cato
  
-festende la selezione all’intera riga di comando.
-G gid,name,restringe la selezione ai processi con GID nella lista indicata.
-nseleziona il processo piu recente.
-oseleziona il processo meno recente.
-P ppid,restringe la selezione ai processi con padre nella lista indicata.
-s sid,restringe la selezione ai processi con session Id nella lista
 indicata.
-t tty,restringe la selezione ai processi con terminale di controllo
 nella lista indicata.
-u uid,name,restringe la selezione ai processi con e ective user ID nella
 lista indicata.
-U uid,name,restringe la selezione ai processi con real user ID nella lista
 indicata.
-vinverte la selezione.
-xrichiede una corrispondenza esatta al nome del comando.
-d delimstampa l’elenco usando il carattere delim come separatore al
 posto dell’a capo.
Translate »