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.
Opzione | Signi cato |
-f | estende la selezione all’intera riga di comando. |
-G gid,name, | restringe la selezione ai processi con GID nella lista indicata. |
-n | seleziona il processo piu recente. |
-o | seleziona 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. | |
-v | inverte la selezione. |
-x | richiede una corrispondenza esatta al nome del comando. |
-d delim | stampa l’elenco usando il carattere delim come separatore al |
posto dell’a capo. |