GNU/Linux >> Belajar Linux >  >> Linux

Memperkenalkan panduan untuk komunikasi antar-proses di Linux

Membuat satu proses perangkat lunak untuk berbicara dengan proses perangkat lunak lain adalah tindakan penyeimbangan yang rumit. Ini bisa menjadi fungsi vital untuk sebuah aplikasi, jadi ini adalah masalah yang harus dipecahkan oleh setiap programmer yang memulai proyek kompleks. Apakah aplikasi Anda perlu memulai pekerjaan yang ditangani oleh perangkat lunak orang lain; untuk memantau tindakan yang dilakukan oleh periferal atau melalui jaringan; atau untuk mendeteksi sinyal dari sumber lain, ketika perangkat lunak Anda bergantung pada sesuatu di luar kodenya sendiri untuk mengetahui apa yang harus dilakukan selanjutnya atau kapan melakukannya, Anda perlu memikirkan komunikasi antar proses (IPC).

Lebih banyak sumber daya Linux

  • Lembar contekan perintah Linux
  • Lembar contekan perintah Linux tingkat lanjut
  • Kursus online gratis:Ikhtisar Teknis RHEL
  • Lembar contekan jaringan Linux
  • Lembar contekan SELinux
  • Lembar contekan perintah umum Linux
  • Apa itu container Linux?
  • Artikel Linux terbaru kami

Sistem operasi Unix memperhitungkan hal ini sejak lama, mungkin karena ekspektasi awal bahwa perangkat lunak akan berasal dari berbagai sumber. Dalam tradisi yang sama, Linux menyediakan banyak antarmuka yang sama untuk IPC dan beberapa yang baru. Kernel Linux memiliki beberapa metode IPC, dan paket util-linux berisi ipcmk , ipcrm , ipcs , dan lsipc perintah untuk memantau dan mengelola pesan IPC.

Tampilkan informasi IPC

Sebelum bereksperimen dengan IPC, Anda harus mengetahui fasilitas IPC apa yang sudah ada di sistem Anda. lsipc perintah menyediakan informasi itu.

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

Anda mungkin memperhatikan bahwa daftar contoh ini mencakup tiga jenis mekanisme IPC yang berbeda, masing-masing tersedia di kernel Linux:pesan (MSG), memori bersama (SHM), dan semaphore (SEM). Anda dapat melihat aktivitas saat ini di setiap subsistem tersebut dengan ipcs perintah:

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

Ini menunjukkan bahwa saat ini tidak ada pesan atau semaphore array, tetapi sejumlah segmen memori bersama sedang digunakan.

Ada contoh sederhana yang dapat Anda lakukan di sistem Anda sehingga Anda dapat melihat salah satu sistem ini bekerja. Ini melibatkan beberapa kode C, jadi Anda harus memiliki alat bantu di sistem Anda. Nama paket yang harus Anda instal untuk dapat membangun dari kode sumber bervariasi tergantung pada distro Anda, jadi lihat dokumentasi Anda untuk spesifiknya. Misalnya, pada distribusi berbasis Debian, Anda dapat mempelajari tentang persyaratan build di bagian BuildingTutorial wiki, dan pada distribusi berbasis Fedora, lihat bagian Menginstal perangkat lunak dari sumber pada dokumen.

Buat antrian pesan

Sistem Anda sudah memiliki antrean pesan default, tetapi Anda dapat membuatnya sendiri menggunakan ipcmk perintah:

$ ipcmk --queue
Message queue id: 32764

Tulis pengirim pesan IPC sederhana, hard-coding dalam ID antrian untuk kesederhanaan:

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

Kompilasi aplikasi dan jalankan:

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

Anda baru saja mengirim pesan ke antrian pesan Anda. Anda dapat memverifikasinya dengan ipcs perintah, menggunakan --queue opsi untuk membatasi keluaran ke antrian pesan:

$ ipcs -q

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

Anda juga dapat mengambil pesan tersebut dengan:

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

Kompilasi dan jalankan dengan:

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

Queue: 32764
Got this message: opensource.com

Unduh eBuku

Ini hanyalah salah satu contoh pelajaran yang tersedia di Panduan Marty Kalin untuk komunikasi antar-proses di Linux, eBook terbaru yang dapat diunduh gratis (dan Creative Commons) dari Opensource.com. Hanya dalam beberapa pelajaran singkat, Anda akan belajar tentang metode POSIX IPC dari antrian pesan, memori bersama dan semaphore, soket, sinyal, dan banyak lagi. Duduklah dengan buku Marty, dan Anda akan muncul sebagai programmer yang berpengetahuan lebih baik. Tetapi ini bukan hanya untuk pembuat kode berpengalaman—jika semua yang Anda tulis hanyalah skrip shell, ada banyak pengetahuan praktis tentang pipa (bernama dan tanpa nama) dan file bersama, serta konsep penting yang perlu Anda ketahui saat menggunakan file bersama atau antrian pesan eksternal.

Jika Anda tertarik untuk membuat perangkat lunak hebat yang ditulis agar dinamis dan sadar sistem, Anda perlu tahu tentang IPC. Biarkan buku ini menjadi panduan Anda.


Linux
  1. Memperkenalkan Amazon Linux

  2. Panduan untuk Perintah "Temukan" Linux

  3. Panduan untuk Perintah "Atas" Linux

  1. Panduan terminal Linux untuk pemula

  2. Alat Linux:Menyampaikan pesan dengan dmesg

  3. Apa kerugian dari antrian pesan Linux?

  1. Komunikasi antar-proses di Linux:Soket dan sinyal

  2. Komunikasi antar-proses di Linux:Menggunakan pipa dan antrian pesan

  3. Komunikasi antar-proses di Linux:Penyimpanan bersama