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.