GNU/Linux >> Znalost Linux >  >> Linux

Představení průvodce meziprocesovou komunikací v Linuxu

Přimět jeden softwarový proces, aby mluvil s jiným softwarovým procesem, je choulostivé vyvažování. Může to být životně důležitá funkce pro aplikaci, takže je to problém, který musí vyřešit každý programátor, který se pouští do složitého projektu. Zda vaše aplikace potřebuje zahájit úlohu, kterou zpracovává software někoho jiného; ke sledování akce prováděné periferním zařízením nebo přes síť; nebo k detekci signálu z nějakého jiného zdroje, když váš software spoléhá na něco mimo svůj vlastní kód, aby věděl, co dělat dál nebo kdy to udělat, musíte přemýšlet o meziprocesové komunikaci (IPC).

Další zdroje pro Linux

  • Cheat pro příkazy Linuxu
  • Cheat sheet pro pokročilé příkazy systému Linux
  • Bezplatný online kurz:Technický přehled RHEL
  • Síťový cheat pro Linux
  • Cheat sheet SELinux
  • Cheat pro běžné příkazy pro Linux
  • Co jsou kontejnery systému Linux?
  • Naše nejnovější články o Linuxu

Operační systém Unix s tím počítal již dávno, možná kvůli dřívějšímu očekávání, že software bude pocházet z různých zdrojů. Ve stejné tradici Linux poskytuje mnoho stejných rozhraní pro IPC a některá nová. Linuxové jádro obsahuje několik metod IPC a balíček util-linux obsahuje ipcmk , ipcrm , ips a lsipc příkazy pro monitorování a správu zpráv IPC.

Zobrazit informace IPC

Než začnete s IPC experimentovat, měli byste vědět, jaká zařízení IPC již ve vašem systému jsou. lsipc příkaz poskytuje tyto informace.

RESOURCE DESCRIPTION               LIMIT  USED  USE%
MSGMNI   Number of message queues  32000     0 0.00%
MSGMAX   Max size of message (byt.. 8192     -     -
MSGMNB   Default max size of queue 16384     -     -
SHMMNI   Shared memory segments     4096    79 1.93%
SHMALL   Shared memory pages       184[...] 25452 0.00%
SHMMAX   Max size of shared memory 18446744073692774399
SHMMIN   Min size of shared memory     1     -     -
SEMMNI   Number of semaphore ident 32000     0 0.00%
SEMMNS   Total number of semaphore 1024000.. 0 0.00%
SEMMSL   Max semaphores per semap  32000     -     -
SEMOPM   Max number of operations p  500     -     -
SEMVMX   Semaphore max value       32767     -     -

Můžete si všimnout, že tento ukázkový výpis obsahuje tři různé typy mechanismů IPC, z nichž každý je dostupný v jádře Linuxu:zprávy (MSG), sdílená paměť (SHM) a semafory (SEM). Aktuální aktivitu v každém z těchto podsystémů můžete zobrazit pomocí ipcs příkaz:

$ ipcs 

------ Message Queues Creators/Owners ---
msqid     perms     cuid      cgid  [...]

------ Shared Memory Segment Creators/Owners
shmid     perms    cuid    cgid  [...]
557056    700      seth    users [...]
3571713   700      seth    users [...]
2654210   600      seth    users [...]
2457603   700      seth    users [...]

------ Semaphore Arrays Creators/Owners ---
semid     perms     cuid      cgid  [...]

To ukazuje, že v současné době neexistují žádné zprávy ani pole semaforů, ale používá se řada segmentů sdílené paměti.

Existuje jednoduchý příklad, který můžete provést na svém systému, abyste viděli, jak jeden z těchto systémů funguje. Zahrnuje to nějaký kód C, takže musíte mít ve svém systému nástroje pro sestavení. Názvy balíčků, které musíte nainstalovat, abyste mohli sestavit ze zdrojového kódu, se liší v závislosti na vaší distribuci, takže podrobnosti najdete ve vaší dokumentaci. Například u distribucí založených na Debianu se můžete dozvědět o požadavcích na sestavení v části BuildingTutorial na wiki a u distribucí založených na Fedoře se podívejte na sekci Instalace softwaru ze zdrojového dokumentu v dokumentaci.

Vytvořit frontu zpráv

Váš systém již má výchozí frontu zpráv, ale můžete si vytvořit vlastní pomocí ipcmk příkaz:

$ ipcmk --queue
Message queue id: 32764

Napište jednoduchého odesílatele zprávy IPC, pro zjednodušení napevno zakódujte ID fronty:

#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdio.h>
#include <string.h>

struct msgbuffer {
  char text[24];
} message;

int main() {
    int msqid = 32764;
    strcpy(message.text,"opensource.com");
    msgsnd(msqid, &message, sizeof(message), 0);
    printf("Message: %s\n",message.text);
    printf("Queue: %d\n",msqid);
    return 0;
        }

Zkompilujte aplikaci a spusťte ji:

$ gcc msgsend.c -o msg.bin
$ ./msg.bin
Message: opensource.com
Queue: 32769

Právě jste odeslali zprávu do vaší fronty zpráv. Můžete si to ověřit pomocí ipcs pomocí příkazu --queue možnost omezit výstup na frontu zpráv:

$ ipcs -q

------ Message Queues --------
key        msqid   owner  perms  used-bytes  messages
0x7b341ab9 0       seth   666    0          0
0x72bd8410 32764   seth   644    24         1

Tyto zprávy můžete také načíst pomocí:

#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdio.h>

struct msgbuffer {
    char text[24];
} message;

int main() {
    int msqid = 32764;
    msgrcv(msqid, &message, sizeof(message),0,0);
    printf("\nQueue: %d\n",msqid);
    printf("Got this message: %s\n", message.text);
    msgctl(msqid,IPC_RMID,NULL);
    return 0;

Zkompilujte a spusťte pomocí:

$ gcc get.c -o get.bin
$ ./get.bin

Queue: 32764
Got this message: opensource.com

Stáhněte si e-knihu

Toto je jen jeden příklad lekcí dostupných v Marty Kalin's A guide to inter-process communication in Linux, nejnovější bezplatné (a Creative Commons) stahovatelné elektronické knize z Opensource.com. V několika krátkých lekcích se dozvíte o POSIX metodách IPC z front zpráv, sdílené paměti a semaforů, soketů, signálů a mnoho dalšího. Posaďte se s Martyho knihou a stanete se lépe informovaným programátorem. Není to však jen pro zkušené kodéry – pokud vše, co kdy píšete, jsou skripty shellu, existuje spousta praktických znalostí o kanálech (pojmenovaných i nepojmenovaných) a sdílených souborech, stejně jako o důležitých konceptech, které potřebujete vědět, když používáte sdílený soubor. nebo externí fronta zpráv.

Pokud máte zájem vytvářet skvělý software, který je napsán tak, aby byl dynamický a znalý systému, musíte vědět o IPC. Nechť je tato kniha vaším průvodcem.


Linux
  1. Linuxové nástroje:Získání zprávy pomocí dmesg

  2. Kompletní průvodce LVM v Linuxu pro začátečníky

  3. Instalujte Linux Mint 19 na VirtualBox:Kompletní průvodce

  1. Průvodce linuxovým terminálem pro začátečníky

  2. Jaké jsou nevýhody linuxových front zpráv?

  3. Co je zpráva Máte novou e-mailovou zprávu v systému Linux/UNIX?

  1. Meziprocesová komunikace v Linuxu:Sokety a signály

  2. Meziprocesová komunikace v Linuxu:Použití kanálů a front zpráv

  3. Meziprocesová komunikace v Linuxu:Sdílené úložiště