【发布时间】:2018-06-01 02:52:42
【问题描述】:
当多个信号到达一个进程时,处理这些信号的进程之间的顺序是什么?
用什么数据结构来存储已经到达进程但还没有被传递的信号?
例如,来自 APUE
由于进程组在父进程终止时成为孤立进程,POSIX.1 要求向新孤立进程组中停止的每个进程(就像我们的子进程一样)发送挂断信号(SIGHUP)后跟 继续信号 (SIGCONT)
这会导致子进程在处理挂断信号后继续。这 挂断信号的默认动作是终止进程,所以我们必须 提供一个信号处理程序来捕获信号。因此,我们期望 printf 在 sig_hup 函数出现在 pr_ids 函数中的 printf 之前。
正如https://stackoverflow.com/a/17769300/156458 所说
在子进程恢复执行之前,无法传递 SIGHUP。 当一个进程停止时,所有的信号传递都会暂停,除了 SIGCONT 和 SIGKILL。
因此,SIGHUP 确实首先到达,但它无法被处理直到 SIGCONT 唤醒进程执行。
SIGHUP 在 SIGCONT 之前到达已停止的进程。 SIGHUP 不能被释放,而 SIGCONT 可以。
SIGCONT 是在 SIGHUP 之前还是之后处理的?第一个引号似乎是“之后”,而第二个引号似乎是“直到”的“之前”。
如果“之前”:
-
如何安排 SIGCONT 跳到 SIGHUP 之前交付?
-
SIGCONF 在释放之前跳转,SIGHUP 如何不被丢弃?
以上是基于FIFO队列或者FILO栈等一些数据结构实现的吗?
谢谢。
【问题讨论】:
标签: linux algorithm data-structures signals