Rumah > Tutorial sistem > LINUX > Penjelasan terperinci tentang fungsi operasi set isyarat Linux

Penjelasan terperinci tentang fungsi operasi set isyarat Linux

WBOY
Lepaskan: 2024-02-09 15:30:31
ke hadapan
725 orang telah melayarinya

Mari kita semak dahulu apakah set isyarat yang belum selesai. Apabila isyarat dijana dan sampai ke destinasinya, proses ini dipanggil penghantaran isyarat. Keadaan perantaraan daripada penjanaan isyarat kepada penghantaran dipanggil keadaan menunggu isyarat. Sebab bagi keadaan belum selesai mungkin kerana isyarat disekat, iaitu, bit yang sepadan dalam perkataan topeng isyarat (atau set isyarat disekat) ditetapkan kepada 1. Kedua-dua set isyarat menyekat dan set isyarat belum selesai dikekalkan oleh kernel. Keseluruhan proses ditunjukkan dalam gambar di bawah:

Penjelasan terperinci tentang fungsi operasi set isyarat Linux

Kadangkala kita perlu menyekat isyarat tertentu, jadi kita perlu mengubah suai set isyarat menyekat. Jadi, bagaimana kita mengubah suai set isyarat menyekat? Satu kaedah yang disediakan oleh sistem ialah kami mula-mula membuat set yang sama dengan set isyarat menyekat, dan kemudian menggunakannya untuk mengubah suai set isyarat menyekat.

Sistem ini menyediakan satu siri fungsi tetapan set isyarat. Fungsi-fungsi ini adalah seperti berikut:

sigset_t  set;

信号集数据类型,本质是typedef unsigned long sigset_t; 

int sigemptyset(sigset_t *set);

将某个信号集清0

int sigfillset(sigset_t *set);

将某个信号集置1

int sigaddset(sigset_t *set, int signum);

将某个信号加入信号集

int sigdelset(sigset_t *set, int signum);

将某个信号清出信号集

以上几个函数返回值均是:成功:0;失败:-1

int sigismember(const sigset_t *set, int signum);

判断某个信号是否在信号集中

返回值:在集合:1;不在:0;出错:-1
Salin selepas log masuk

Selepas mencipta set isyarat menggunakan fungsi di atas, bagaimana untuk menukar set isyarat menyekat? Sistem ini menyediakan fungsi lain: fungsi sigprocmask. Fungsi sigprocmask boleh digunakan untuk menyekat isyarat atau membuka sekatan Intipatinya ialah menggunakan set isyarat yang kami cipta untuk menukar set isyarat menyekat.

Prototaip fungsi:

int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
Salin selepas log masuk

Nilai pulangan:

Kejayaan: 0; Kegagalan: -1, set errno

Penjelasan parameter:

set: Parameter masuk ialah bitmap Bit mana dalam set ialah 1 menunjukkan isyarat yang disekat oleh proses semasa.

oldset: Parameter keluar, simpan set topeng isyarat lama. Ini agak serupa dengan setimer.

bagaimana nilai parameter:

Anggap bahawa perkataan topeng isyarat semasa ialah topeng

1.SIG_BLOCK: Apabila cara ditetapkan kepada nilai ini, set menunjukkan isyarat yang perlu disekat. Setaraf mask = mask |

2.SIG_UNBLOCK: Apabila cara ditetapkan kepada ini, set menunjukkan isyarat yang perlu dinyahsekat. Setaraf mask = mask & ~set

3.SIG_SETMASK: Apabila cara ditetapkan kepada ini, set mewakili set topeng baharu yang digunakan untuk menggantikan topeng asal. Bersamaan dengan mask = set Jika memanggil sigprocmask menyahsekat beberapa isyarat semasa, sekurang-kurangnya satu daripada isyarat akan dihantar sebelum sigprocmask kembali.

Bagaimana kita membaca set isyarat yang belum selesai? Sistem ini menyediakan fungsi signpending.

Prototaip fungsi:

int sigpending(sigset_t *set);
Salin selepas log masuk

Penerangan parameter:

tetapkan parameter keluar.

Nilai pulangan:

Nilai pulangan: Kejayaan: 0; Kegagalan: -1, set errno

Contoh: Cetak status belum selesai semua isyarat biasa ke skrin.

#include 
#include 
#include 

void printPending(sigset_t *set)
{
    int i = 0;

    for (i = 0; i if (sigismember(set, i) == 1)
            printf("1");
        else
            printf("0");
    }
    printf("\n");
}

int main()
{
    sigset_t set, oldset, pendset;
    sigemptyset(&set);
    sigaddset(&set, SIGQUIT);   // ctrl + \ 将产生SIGQUIT信号
    sigprocmask(SIG_BLOCK, &set, &oldset);
    while (1) {
        sigpending(&pendset);
        printPending(&pendset);     // 写一个函数打印未决信号集
        sleep(1);
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Penjelasan terperinci tentang fungsi operasi set isyarat Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:lxlinux.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan