GNU/Linux >> Znalost Linux >  >> Linux

IPC využívající signály na linuxu

Signály mají poskytovat základní formu kontroly nad procesem, nikoli jako mechanismus IPC. Signály mají několik problémů, když se používají jako cokoli jiného:

  • Spousta systémových hovorů bude přerušena signálem a vyžaduje zvláštní zacházení.

  • V souladu s tím mnoho kódu ve volné přírodě není bezpečné pro signál.

  • Signály nemají žádný druh datového obsahu, kromě nich samotných. Díky tomu jsou většinou nepoužitelné jako metoda předávání zpráv.

  • V obslužném programu signálu můžete udělat jen tolik.

  • A co je nejdůležitější, následné signály stejného typu nejsou zařazeny do fronty – jsou sloučeny do jednoho případu.

  • Ještě důležitější je, že neexistuje žádná záruka, že signály budou doručeny ve stejném pořadí, v jakém byly generovány . Z manuálové stránky:

    Naproti tomu, pokud proces čeká na více standardních signálů, není určeno pořadí, ve kterém jsou dodávány .

Možná teoreticky být schopen nastavit nějaký druh kanálu pomocí několika signálů jdoucích tam a zpět, přičemž některé fungují jako nějaké potvrzení, ale žádný rozumný člověk by se o něco takového nechtěl pokoušet. Místo toho můžete také použít kouřové signály...


Je možné provést IPC (meziprocesovou komunikaci) pomocí zachycení signálu a zvýšení signálu?

Ano i ne. Pokud vezmete v úvahu pouze signály, můžete poslat signál jinému procesu, ale nemůžete poslat nic jiného než jen signál.

Chci také předávat zprávy s tímto signálem. Mohu to udělat? Je to možné?

Ne, ne tak, jak se snažíš. K tomu můžete použít sokety, soubory, kanály nebo pojmenované kanály. Pokud se chcete dozvědět více o UNIX IPC, přečtěte si Pokročilé programování v prostředí UNIX.


Ne, nezkoušejte k tomu používat signály. Nemůžete připojit další data k jiným signálům než ke struktuře siginfo. Hlavním problémem při používání signálů však je, že tak málo je signál bezpečných. Musíte se vyhnout téměř všem běhovým rutinám C a ujistit se, že přijímající program kontroluje EINTR u všech svých volání jádra. Jediná věc, kterou můžete říci o tom, když se objeví signál, je, že to nebude, když ho očekáváte (trochu jako španělská inkvizice).

Navrhuji, abyste se podívali na další mechanismy IPC, jako je sdílená paměť, fronty zpráv, fifos (pojmenované kanály) a zásuvky.


Linux
  1. Použití příkazu ripgrep (rg) v Linuxu

  2. 50 Výukové programy Sysadmin pro UNIX / Linux

  3. Linux Signals – příklad programu C pro zachycení signálů (SIGINT, SIGKILL, SIGSTOP atd.)

  1. Základy signálů Linuxu – část I

  2. Kali Linux na Androidu pomocí Linux Deploy

  3. Příklady použití příkazu dmsetup v Linuxu

  1. Identifikujte vlastnosti zabezpečení v systému Linux pomocí checksec

  2. Zpracování signálů UNIX/Linux:SIGEV_THREAD

  3. Linuxový systém řazení front