GNU/Linux >> Belajar Linux >  >> Linux

IPC menggunakan Sinyal di linux

Sinyal dimaksudkan untuk memberikan bentuk kontrol yang belum sempurna atas suatu proses, bukan sebagai mekanisme IPC. Sinyal memiliki beberapa masalah saat digunakan sebagai hal lain:

  • Banyak panggilan sistem akan terganggu oleh sinyal dan memerlukan penanganan khusus.

  • Oleh karena itu, banyak kode di alam liar yang tidak aman untuk sinyal.

  • Sinyal tidak memiliki konten data apa pun, kecuali untuk dirinya sendiri. Ini membuat mereka sebagian besar tidak berguna sebagai metode penyampaian pesan.

  • Hanya ada begitu banyak yang dapat Anda lakukan dalam penangan sinyal.

  • Yang paling penting, sinyal berikutnya dari jenis yang sama tidak diantrekan - keduanya digabung menjadi satu contoh.

  • Lebih penting lagi, tidak ada jaminan bahwa sinyal dikirimkan dalam urutan yang sama seperti saat dihasilkan . Dari halaman manual:

    Sebaliknya, jika beberapa sinyal standar menunggu proses, urutan pengirimannya tidak ditentukan .

Anda mungkin secara teoritis dapat mengatur semacam saluran menggunakan beberapa sinyal bolak-balik, dengan beberapa bertindak seperti semacam pengakuan, tetapi tidak ada orang waras yang mau mencoba sesuatu seperti itu. Anda sebaiknya menggunakan sinyal asap sebagai gantinya...


Apakah mungkin untuk melakukan IPC (inter process communication) menggunakan signal catch dan signal raise?

Iya dan tidak. Mempertimbangkan sinyal saja, Anda dapat mengirim sinyal ke proses lain, tetapi Anda tidak dapat mengirim apa pun selain hanya sinyal.

Saya ingin menyampaikan pesan dengan sinyal ini juga. Bisakah saya melakukannya? Apakah mungkin?

Tidak, bukan cara yang Anda coba. Anda dapat menggunakan soket, file, pipa, atau pipa bernama untuk melakukan ini. Jika Anda ingin mempelajari lebih lanjut tentang UNIX IPC, baca Pemrograman Tingkat Lanjut di Lingkungan UNIX.


Tidak, jangan mencoba dan menggunakan sinyal untuk ini. Anda tidak dapat melampirkan data tambahan dengan sinyal selain dari struktur siginfo. Masalah utama dengan menggunakan sinyal adalah begitu sedikit sinyal yang aman. Anda harus menghindari hampir semua rutinitas runtime C, dan pastikan program penerima melakukan pemeriksaan EINTR pada semua panggilan kernelnya. Satu-satunya hal yang dapat Anda katakan tentang kapan sinyal muncul adalah bahwa itu tidak akan terjadi saat Anda mengharapkannya (mirip dengan Inkuisisi Spanyol).

Saya sarankan Anda melihat mekanisme IPC lainnya, seperti memori bersama, antrian pesan, fifos (bernama pipa), dan soket.


Linux
  1. Debug Linux menggunakan ProcDump

  2. 50 Tutorial Sysadmin UNIX / Linux

  3. Contoh penggunaan getnstimeofday di kernel Linux

  1. Pindahkan folder di Linux menggunakan perintah mv

  2. Penanganan sinyal UNIX/Linux:SIGEV_THREAD

  3. signalfd() melewatkan sinyal

  1. Identifikasi properti keamanan di Linux menggunakan checksec

  2. Sistem antrian Linux

  3. Bisakah sinyal diabaikan (hilang)?