gpt4 book ai didi

linux - 信号掩码和信号集之间有什么关系和区别?

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:35 25 4
gpt4 key购买 nike

来自APUE

Each process has a signal mask that defines the set of signals currently blocked from delivery to that process. We can think of this mask as having one bit for each possible signal. If the bit is on for a given signal, that signal is currently blocked. A process can examine and change its current signal mask by calling sigprocmask, which we describe in Section 10.12.

Since it is possible for the number of signals to exceed the number of bits in an integer, POSIX.1 defines a data type, called sigset_t, that holds a signal set. The signal mask, for example, is stored in one of these signal sets. We describe five functions that operate on signal sets in Section 10.11.

信号掩码和信号集之间有什么关系和区别?

信号桅杆是数据,信号集是对象吗,因为数据存储在对象中?

它们之间有什么区别,我们什么时候应该使用哪个:

#include <signal.h>
int sigaddset(sigset_t *set, int signo);
int sigdelset(sigset_t *set, int signo);

#include <signal.h>
int sigprocmask(int how, const sigset_t *restrict set, sigset_t *restrict oset);

谢谢。

最佳答案

信号掩码是进程的一个属性,是被阻止的信号列表。 sigprocmask 检索和/或更新进程的此属性。

信号集是一种保存信号编号列表的数据类型。 sigaddsetsigdelset 用于修改包含此数据的对象。

当您想要设置或检索进程的信号掩码时,sigprocmask() 系统调用采用类型为 sigset_t* 的参数来保存指向此列表的指针。

这类似于进程 ID 和 pid_t 之间的关系。

因此,如果您想修改进程的信号掩码,您可以执行以下操作:

  1. 使用 null set 和非 null oset 参数调用 sigprocmask(),以获取 sigset_t 变量中的当前进程掩码。
  2. 调用 sigaddset() 和/或 sigdelset() 在该变量中添加和删除信号。
  3. 使用 how = SIG_SETMASK 和包含更新信号集的 set 调用 sigprocmask()

如果您只想在掩码中添加或删除信号,而不是同时添加或删除两者,则可以使用 SIG_BLOCKSIG_UNBLOCK 操作在对 sigprocmask 的单次调用中完成此操作。只需创建一个包含您要添加或删除的信号的信号集,它们就会与现有的掩码合并。

关于linux - 信号掩码和信号集之间有什么关系和区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50613328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com