GNU/Linux >> Tutoriales Linux >  >> Linux

Presentamos la guía para la comunicación entre procesos en Linux

Lograr que un proceso de software se comunique con otro proceso de software es un delicado acto de equilibrio. Sin embargo, puede ser una función vital para una aplicación, por lo que es un problema que cualquier programador que se embarque en un proyecto complejo debe resolver. Si su aplicación necesita iniciar un trabajo que está siendo manejado por el software de otra persona; para monitorear una acción que está siendo realizada por un periférico oa través de una red; o para detectar una señal de alguna otra fuente, cuando su software se basa en algo fuera de su propio código para saber qué hacer a continuación o cuándo hacerlo, debe pensar en la comunicación entre procesos (IPC).

Más recursos de Linux

  • Hoja de trucos de los comandos de Linux
  • Hoja de trucos de comandos avanzados de Linux
  • Curso en línea gratuito:Descripción general técnica de RHEL
  • Hoja de trucos de red de Linux
  • Hoja de trucos de SELinux
  • Hoja de trucos de los comandos comunes de Linux
  • ¿Qué son los contenedores de Linux?
  • Nuestros últimos artículos sobre Linux

El sistema operativo Unix dio cuenta de esto hace mucho tiempo, posiblemente debido a una expectativa temprana de que el software se originaría a partir de diversas fuentes. Siguiendo la misma tradición, Linux proporciona muchas de las mismas interfaces para IPC y algunas nuevas. El kernel de Linux presenta varios métodos IPC y el paquete util-linux contiene el ipcmk , ipcrm , ipc y lsipc comandos para monitorear y administrar mensajes IPC.

Mostrar información de IPC

Antes de experimentar con IPC, debe saber qué funciones de IPC ya están instaladas en su sistema. El lsipc comando proporciona esa información.

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     -     -

Puede notar que esta lista de muestra incluye tres tipos diferentes de mecanismos IPC, cada uno disponible en el kernel de Linux:mensajes (MSG), memoria compartida (SHM) y semáforos (SEM). Puede ver la actividad actual en cada uno de esos subsistemas con ipcs comando:

$ 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  [...]

Esto muestra que actualmente no hay mensajes ni conjuntos de semáforos, pero se están utilizando varios segmentos de memoria compartida.

Hay un ejemplo simple que puede realizar en su sistema para que pueda ver uno de estos sistemas en funcionamiento. Implica algo de código C, por lo que debe tener herramientas de compilación en su sistema. Los nombres de los paquetes que debe instalar para poder compilar a partir del código fuente varían según su distribución, así que consulte su documentación para obtener información específica. Por ejemplo, en las distribuciones basadas en Debian, puede obtener información sobre los requisitos de compilación en la sección BuildingTutorial de la wiki, y en las distribuciones basadas en Fedora, consulte la sección Instalación de software desde el origen de los documentos.

Crear una cola de mensajes

Su sistema ya tiene una cola de mensajes predeterminada, pero puede crear la suya propia usando el ipcmk comando:

$ ipcmk --queue
Message queue id: 32764

Escriba un remitente de mensaje IPC simple, codificando en el ID de la cola para simplificar:

#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;
        }

Compile la aplicación y ejecútela:

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

Acabas de enviar un mensaje a tu cola de mensajes. Puede verificar eso con el ipcs comando, usando el --queue opción para limitar la salida a la cola de mensajes:

$ ipcs -q

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

También puede recuperar esos mensajes con:

#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;

Compilar y ejecutar con:

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

Queue: 32764
Got this message: opensource.com

Descargar el eBook

Este es solo un ejemplo de las lecciones disponibles en la guía para la comunicación entre procesos en Linux de Marty Kalin, el último libro electrónico descargable gratuito (y Creative Commons) de Opensource.com. En solo unas pocas lecciones breves, aprenderá sobre los métodos POSIX de IPC a partir de colas de mensajes, memoria compartida y semáforos, sockets, señales y mucho más. Siéntese con el libro de Marty y emergerá como un programador mejor informado. Pero no es solo para codificadores experimentados:si todo lo que escribe son scripts de shell, hay muchos conocimientos prácticos sobre canalizaciones (con nombre y sin nombre) y archivos compartidos, así como conceptos importantes que necesita saber cuando usa un archivo compartido. o una cola de mensajes externa.

Si está interesado en crear un gran software que esté escrito para ser dinámico y consciente del sistema, necesita saber acerca de IPC. Deje que este libro sea su guía.


Linux
  1. Una guía de la terminal de Linux para principiantes

  2. Comunicación entre procesos en Linux:sockets y señales

  3. Comunicación entre procesos en Linux:uso de conductos y colas de mensajes

  4. Comunicación entre procesos en Linux:Almacenamiento compartido

  5. Herramientas de Linux:enviar el mensaje con dmesg

La guía completa para usar ffmpeg en Linux

Cómo matar o terminar un proceso de Linux:la guía definitiva

Una guía práctica para el comando chroot en Linux

La guía definitiva del subsistema de Windows para Linux (Windows WSL)

La guía definitiva para crear usuarios en Linux/Unix

Cómo degradar paquetes en el sistema Linux:la guía definitiva