GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux C:Ist es möglich, beim Empfang eines Signals die PID des Absenders zu kennen?

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 wie signal )
  • 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 wie SIGSEGV .)
  • A ucontext_t * , was damit zu tun hat, welcher Thread das Signal erhalten hat. Meistens ignorierbar.

Linux
  1. Linux – Finden Sie die Pid des Prozesses mit einem bestimmten Port?

  2. Gibt es eine Möglichkeit, die Größe von L1-, L2-, L3-Cache und RAM in Linux zu ermitteln?

  3. Signalwarteschlangen in C

  4. Ist es möglich, die Helvetica-Schriftart unter Linux zu installieren?

  5. Was ist die kleinstmögliche Linux-Implementierung?

15 Dinge, die Sie über die Linux-Verzeichnisstruktur wissen müssen

Alles, was Sie über das Linux-Dateisystem wissen müssen

FreeBSD vs. Linux:20 Dinge, die man über beide Systeme wissen sollte

Wie man die Gruppen eines Linux-Benutzers kennt

So finden Sie die PID und PPID eines Prozesses in Linux

Alle Möglichkeiten, um die Überhitzung von Laptops unter Linux zu reduzieren