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.