GNU/Linux >> Belajar Linux >  >> Linux

Antrian sinyal di C

Jika beberapa sinyal dengan jenis yang sama dikirim dan tidak ditangani, sinyal tersebut tidak akan diantrekan. Ucapkan program mask SIGUSR1 , memanggil kill(getpid(), SIGUSR1) 10 kali dan membuka kedok SIGUSR1 . Ini akan menerima SIGUSR1 sekali saja.


Apa yang terjadi adalah sebagai berikut:

  1. Sinyal pertama diterima, yaitu SIGUSR1, handler dipanggil dan berjalan
  2. Sinyal kedua diterima, karena penangan dari nr1 masih berjalan, sinyal nr2 tertunda dan diblokir.
  3. Sinyal ketiga diterima, karena penangan dari nr1 masih berjalan, sinyal 3 dibuang.
  4. Sinyal keempat, kelima...dst dari jenis yang sama dengan sinyal nr1 dibuang.

Setelah penangan sinyal selesai dengan sinyal nr1, itu akan memproses sinyal nr2, dan kemudian penangan sinyal akan memproses SIGUSR2.

Pada dasarnya, sinyal tertunda dari jenis yang sama tidak diantrekan, tetapi dibuang. Dan tidak, tidak ada cara mudah untuk "meledak" mengirim sinyal seperti itu. Seseorang selalu berasumsi bahwa mungkin ada beberapa sinyal yang dibuang, dan mencoba membiarkan pawang melakukan pekerjaan pembersihan dan mencari tahu apa yang harus dilakukan (seperti menuai anak, jika semua anak mati pada saat bersamaan).


Linux
  1. 5 Contoh Pernyataan Kasus Bash

  2. Python - Jebak semua sinyal

  3. Bagaimana cara menulis penangan sinyal untuk menangkap SIGSEGV?

  1. Melacak asal sinyal UNIX?

  2. Penanganan sinyal UNIX/Linux:SIGEV_THREAD

  3. Mengizinkan Ctrl-C untuk menginterupsi ekstensi-C python

  1. Bagaimana cara menghindari penggunaan printf dalam penangan sinyal?

  2. Utas mana yang menangani sinyal?

  3. Sistem antrian Linux