-Solo l'amministratore può inviare un segnale ad un processo qualunque, in
-tutti gli altri casi l'\ids{UID} reale o l'\ids{UID} effettivo del processo
-chiamante devono corrispondere all'\ids{UID} reale o all'\ids{UID} salvato
-della destinazione. Fa eccezione il caso in cui il segnale inviato sia
-\signal{SIGCONT}, nel quale occorre che entrambi i processi appartengano alla
-stessa sessione. Inoltre, dato il ruolo fondamentale che riveste nel sistema
-(si ricordi quanto visto in sez.~\ref{sec:sig_termination}), non è possibile
-inviare al processo 1 (cioè a \cmd{init}) segnali per i quali esso non abbia
-un gestore installato.
+A seconda del valore dell'argomento \param{pid} si può inviare il segnale ad
+uno specifico processo, ad un \textit{process group} (vedi
+sez.~\ref{sec:sess_proc_group}) o a tutti i processi, secondo quanto
+illustrato in tab.~\ref{tab:sig_kill_values} che riporta i valori possibili
+per questo argomento. Si tenga conto però che il sistema ricicla i \ids{PID}
+(come accennato in sez.~\ref{sec:proc_pid}) per cui l'esistenza di un processo
+non significa che esso sia realmente quello a cui si intendeva mandare il
+segnale.
+
+Si noti pertanto che la funzione \code{raise(sig)} può essere definita in
+termini di \func{kill}, ed è sostanzialmente equivalente ad una
+\code{kill(getpid(), sig)}. Siccome \func{raise}, che è definita nello
+standard ISO C, non esiste in alcune vecchie versioni di Unix, in generale
+l'uso di \func{kill} finisce per essere più portabile. Una seconda funzione
+che può essere definita in termini di \func{kill} è \funcd{killpg}, il suo
+prototipo è:
+
+\begin{funcproto}{
+\fhead{signal.h}
+\fdecl{int killpg(pid\_t pidgrp, int signal)}
+\fdesc{Invia un segnale ad un \itindex{process~group} \textit{process group}.}
+}
+
+{ La funzione ritorna $0$ in caso di successo e $-1$ per un errore, e gli
+ errori sono gli stessi di \func{kill}. }
+\end{funcproto}
+
+
+La funzione invia il segnale \param{signal} al \itindex{process~group}
+\textit{process group} \param{pidgrp} ed è è sostanzialmente equivalente
+all'esecuzione di \code{kill(-pidgrp, signal)}.
+
+Oltre a queste funzioni di base vedremo più avanti che esistono altre funzioni
+per inviare segnali, come \func{sigqueue} per i segnali \textit{real-time}
+(vedi sez.~\ref{sec:sig_real_time}) e le specifiche funzioni per i
+\textit{thread} che tratteremo in sez.~\ref{sec:thread_signal}.
+
+Ma indipendentemente dalla funzione usata solo l'amministratore può inviare un
+segnale ad un processo qualunque, in tutti gli altri casi l'\ids{UID} reale o
+l'\ids{UID} effettivo del processo chiamante devono corrispondere
+all'\ids{UID} reale o all'\ids{UID} salvato della destinazione. Fa eccezione
+il caso in cui il segnale inviato sia \signal{SIGCONT}, nel quale occorre che
+entrambi i processi appartengano alla stessa sessione. Inoltre, dato il ruolo
+fondamentale che riveste nel sistema (si ricordi quanto visto in
+sez.~\ref{sec:sig_termination}), non è possibile inviare al processo 1 (cioè a
+\cmd{init}) segnali per i quali esso non abbia un gestore installato.