Ja. Registrieren Sie Ihren Signalhandler mit sigaction
mit der SA_SIGINFO
Flag, indem Sie sa_sigaction
ausfüllen aufstellen. Jetzt nimmt Ihre Handler-Funktion einen siginfo_t*
Parameter, der ein Feld si_pid
enthält .
Beachten Sie, dass si_pid
wird nur unter bestimmten Umständen gesetzt. In Ihrem Fall sollten Sie das überprüfen, indem Sie si_code
überprüfen auf SI_USER
eingestellt ist oder SI_QUEUE
. Lesen Sie man 2 sigaction
für mehr.
Ja, wenn Sie den sigaction()
verwenden statt signal
aufrufen, um Ihren Signal-Handler einzurichten . Dadurch können Sie einen Signal-Handler einrichten, der drei Parameter akzeptiert:
- Ein
int
, für die Signalnummer (genauso wiesignal
) - A
siginfo_t *
, das ist eine Struktur, die alle möglichen Informationen über die Quelle des Signals enthält, einschließlich der PID des Absenders, falls zutreffend. (Es enthält auch einige Informationen über die Ursache des Signals für automatische Signale wieSIGSEGV
.) - A
ucontext_t *
, was damit zu tun hat, welcher Thread das Signal erhalten hat. Meistens ignorierbar.