Artikel ini membawakan anda pengetahuan yang berkaitan tentang komunikasi antara proses Linux, termasuk paip, paip tanpa nama, memori dikongsi dan isu berkaitan yang lain, saya harap ia akan membantu semua orang.
·Komunikasi antara proses: Kaedah yang disediakan oleh sistem pengendalian untuk sistem melaksanakan komunikasi antara proses
Adalah mustahil untuk berkomunikasi secara langsung antara proses kerana setiap proses mempunyai ruang alamat maya yang bebas dan mengakses alamat mayanya sendiri Oleh itu, proses tersebut adalah bebas dan tidak boleh berkomunikasi secara langsung
Mengikut senario komunikasi. adalah berbeza, jadi pelbagai kaedah komunikasi disediakan
Jenis kaedah komunikasi antara proses: paip, memori dikongsi, baris gilir mesej, semafor
·Saluran paip
Ciri-ciri: Komunikasi separuh dupleks - komunikasi sehala dengan arah yang anda boleh pilih
Intipati: Buka penimbal dalam kernel (sekeping memori dalam kernel ruang)
Prinsip: Pelbagai proses berkomunikasi dengan mengakses penimbal dalam kernel yang sama (menyalin pemegang operasi penimbal)
Kategori: Paip tanpa nama: Penampan tidak mempunyai pengecam dan hanya boleh digunakan dengan komunikasi antara proses pertalian
Paip bernama: Penampan mempunyai pengecam dan boleh digunakan untuk sebarang komunikasi antara proses pada hos yang sama
Semua di bawah Linux ialah fail - semuanya dianggap sebagai fail Lakukan operasi yang sama (termasuk paip), dan lengkapkan akses kepada paip melalui operasi IO
·Paip tanpa nama
Nilai pulangan: 0 pada kejayaan; -1 pada kegagalan
Ciri: Hanya boleh digunakan untuk komunikasi antara proses dengan pertalian
Paip tanpa nama tidak mempunyai pengecam , tidak boleh ditemui oleh proses lain, dan hanya boleh mendapatkan pemegang operasi untuk mencapai komunikasi dengan menyalin proses induk melalui proses anak
Ciri baca dan tulis: Jika tiada data dalam paip, baca akan menyekat
Jika data dalam paip penuh, tulis akan menyekat
Hujung bacaan semua saluran paip ditutup, dan Tulis yang berterusan akan mencetuskan keabnormalan, menyebabkan ranap proses menarik diri daripada
Hujung tulisan semua paip ditutup, dan terus membaca akan membaca dan membacanya akan membaca Kembali 0 selepas melengkapkan data dan tidak lagi menyekat
Nota: Saluran paip adalah komunikasi separuh dupleks, sekali arah dipilih, hujung yang tidak digunakan hendaklah ditutup.
· Paip bernama: pada asasnya ialah penimbal dalam kernel, dengan pengecam, Boleh didapati oleh proses lain, jadi ia boleh digunakan untuk sebarang komunikasi antara proses pada hos yang sama Pengecam paip bernama ialah fail jenis paip yang boleh dilihat dalam sistem fail
Pelbagai proses membuka fail paip yang sama, mengakses penimbal dalam kernel yang sama untuk mencapai komunikasi
Operasi arahan: nama fail mkfifo Cipta fail paip bernama
Operasi fungsi: int mkfifo(const char *nama laluan, mod_t ) ;
nama laluan: nama fail; mod: kebenaran penciptaan
Nilai pulangan: 0 dikembalikan apabila berjaya; -1 dikembalikan apabila gagal
·Ringkasan: Intipati paip: penimbal dalam ruang kernel Prinsip: Pelbagai proses mencapai penghantaran data dengan mengakses penimbal yang sama
Kategori: paip tanpa nama, paip bernama
Paip tanpa nama: hanya boleh digunakan untuk komunikasi antara proses dengan pertalian
Paip bernama: boleh digunakan untuk sebarang komunikasi antara proses pada hos yang sama
Ciri: ① Komunikasi separuh dupleks --Komunikasi sehala dengan arah boleh dipilih
Menyediakan perkhidmatan penghantaran strim bait: penstriman berasaskan sambungan yang teratur, boleh dipercayai
Berasaskan sambungan: semua pembaca ditutup maka tulis adalah tidak normal; jika semua hujung tulis ditutup, baca pulangan 0
② Datang dengan penyegerakan dan pengecualian bersama:
Penyegerakan: Keselamatan operasi akses dicapai melalui akses unik sumber kritikal oleh proses pada masa yang sama
Saling eksklusif: Jadikan akses proses kepada sumber kritikal lebih munasabah dan teratur melalui beberapa pertimbangan bersyarat
kemudian tulis blok
③ Kitaran hidup bergantung pada proses: tanpa campur tangan manusia, setelah semua proses yang membuka keluar paip, penampan paip dikeluarkan
·Memori dikongsi: Digunakan untuk merealisasikan perkongsian data antara proses Intipati: sekeping memori fizikal
Prinsip: membuka sekeping ruang memori fizikal dan pelbagai proses akan memetakan blok yang sama ke memori maya mereka sendiri Ruang alamat diakses terus melalui alamat maya untuk mencapai perkongsian data
Ciri-ciri: Kaedah komunikasi antara proses terpantas, kitaran hayat mengikuti kernel
Memori dikongsi secara langsung mengakses memori fizikal melalui alamat maya untuk mencapai perkongsian data Berbanding dengan kaedah lain, data perlu dipindahkan Salin ke kernel dan salin ke mod pengguna apabila digunakan, menghapuskan dua operasi penyalinan data
Nota: Isu keselamatan perlu diberi perhatian apabila mengendalikan memori kongsi Proses operasi:
①Buat atau buka memori kongsi
②Petakan memori yang dikongsi ke ruang alamat maya proses
③Lakukan pelbagai operasi memori melalui alamat maya yang dipetakan
④Nyahpetakan hubungan pemetaan
⑤Padamkan memori yang dikongsi
int shmget(key_t key, size_t size, int shmflg);
key: pengecam (berbilang proses membuka memori kongsi yang sama melalui pengecam yang sama)
saiz : Saiz ruang yang dibuka semasa penciptaan (dalam halaman memori)
shmflg: Kaedah pembukaan Kebenaran penciptaan--IPC_CREAT|IPC_EXCL|0664
Nilai pulangan: Berjaya mengembalikan integer bukan negatif - -Pengendalian operasi; kegagalan kembali -1
void *shmat(int shmid, const void *shmaddr, int shmflg);
shmid: pemegang operasi dikembalikan oleh shmget
shmaddr: alamat pemetaan, biasanya ditetapkan kepada NULL
shmflg: Mod akses selepas pemetaan berjaya; SHM_RDONLY-baca-sahaja; 1 jika gagal
int shmdt(const void *shmaddr);
shmaddr: alamat pertama dipetakan Nilai pulangan: 0 pada kejayaan; -1 pada kegagalan
int shmctl (int shmid, int cmd, struct shmid_ds *buf); Dimusnahkan buf: Untuk IPC_RMID, 0 dikembalikan apabila berjaya, -1 dikembalikan apabila gagal
·Baris Gilir Mesej Intipati: Baris gilir keutamaan dalam kernel Berbilang proses mengakses baris gilir yang sama dan menambah atau mendapatkan nod pada baris gilir untuk merealisasikan penghantaran blok data antara proses Ciri-ciri: Penyegerakan terbina dalam dan pengecualian bersama, hayat Kitaran berubah dengan kernel
·Semaphore
Intipati: baris gilir menunggu pcb kaunter dalam kernel Fungsi: digunakan Realisasikan penyegerakan dan pengecualian bersama antara proses, dan selaraskan akses kepada sumber kritikal melalui prosesOperasi P: Kaunter -1, tentukan sama ada kiraan kurang daripada 0, sekat proses Operasi V: Kaunter 1, bangunkan Proses yang disekat
mengira sumber melalui kaunternya sendiri dan menggunakan pengiraan untuk menentukan sama ada proses perolehan sumber adalah munasabah. Jika ia tidak munasabah, ia akan disekat. Selepas menunggu sumber dijana, bangunkan proses yang disekat Pelaksanaan segerak: Kira sumber melalui pembilang, dan lakukan operasi P sebelum memperoleh sumber Pelaksanaan saling eksklusif: Pembilang ialah 1, yang bermaksud Terdapat hanya satu sumber Proses menjalankan operasi P sebelum mengakses sumber dan operasi V selepas capaian selesaiCadangan berkaitan: "Tutorial Video Linux"
Atas ialah kandungan terperinci Teknik klasik untuk komunikasi antara proses Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!