GNU/Linux >> Znalost Linux >  >> Linux

Linux C:Je možné po přijetí signálu znát PID odesílatele?

Ano. Zaregistrujte svůj obslužný program signálu pomocí sigaction s SA_SIGINFO příznak, vyplňte sa_sigaction pole. Nyní vaše funkce obslužného programu trvá siginfo_t* parametr, který obsahuje pole si_pid .

Všimněte si, že si_pid se nastavuje pouze za určitých okolností. Ve vašem případě budete chtít zkontrolovat, zda je si_code je nastaven na SI_USER nebo SI_QUEUE . Přečtěte si man 2 sigaction pro více.


Ano, pokud používáte sigaction() zavolejte, abyste nastavili obsluhu signálu namísto signal . Pokud tak učiníte, umožní vám nastavit obsluhu signálu, která přebírá tři parametry:

  • int , pro číslo signálu (stejně jako signal )
  • A siginfo_t * , což je struktura obsahující nejrůznější informace o zdroji signálu, případně včetně pid odesílatele. (Zahrnuje také některé informace o příčině signálu pro automatické signály jako SIGSEGV .)
  • A ucontext_t * , což souvisí s tím, které vlákno dostalo signál. Většinou ignorovatelné.

Linux
  1. Rozebírání příkazu free:Co potřebuje vědět správce systému Linux

  2. 7 nejpoužívanějších jmenných prostorů Linuxu

  3. Linux – Nalezení PID procesu pomocí konkrétního portu?

  1. Jaký způsob, jak zjistit velikost mezipaměti L1, L2, L3 a RAM v Linuxu?

  2. Je možné nainstalovat font Helvetica na linux?

  3. Je možné restartovat operační systém Linux bez restartování hardwaru?

  1. Zkontrolujte limit otevřeného FD pro daný proces v Linuxu

  2. Zařazení signálu do fronty v C

  3. Je možné zavést linuxové jádro bez vytvoření obrazu initrd?