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.