Sì. Registra il tuo gestore di segnale usando sigaction
con il SA_SIGINFO
flag, compilando il sa_sigaction
campo. Ora la tua funzione di gestione accetta un siginfo_t*
parametro, che include un campo si_pid
.
Nota che si_pid
viene impostato solo in alcune circostanze. Nel tuo caso, ti consigliamo di controllare che controlla quel si_code
è impostato su SI_USER
o SI_QUEUE
. Leggi man 2 sigaction
per saperne di più.
Sì, se usi il sigaction()
chiama per impostare il tuo gestore di segnale invece di signal
. In questo modo potrai configurare un gestore di segnale che accetta tre parametri:
- Un
int
, per il numero del segnale (proprio comesignal
) - Un
siginfo_t *
, che è una struttura contenente tutti i tipi di informazioni sull'origine del segnale, incluso il pid del mittente, se applicabile. (Include anche alcune informazioni sulla causa del segnale per i segnali automatici comeSIGSEGV
.) - Un
ucontext_t *
, che ha a che fare con il thread che ha ricevuto il segnale. Per lo più ignorabile.