I segnali

16 / 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.

How useful was this post?

Click on a star to rate it!

Average rating / 5. Vote count:

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?