sigprocmask之后传递信号

时间:2018-05-05 22:31:39

标签: signals sigprocmask

我认为使用sigprocmask()取消阻止信号会导致待处理的阻止信号被传递到进程。

sigprocmask()用于取消阻止信号的特定情况下,如果有待处理信号(例如SIGUSR1)已被解锁,信号SIGUSR1是否会被传送到通过调用sigprocmask()来解锁阻止不同信号同时保持SIGUSR1未阻止的过程?

1 个答案:

答案 0 :(得分:1)

要彻底了解它,我们需要了解如何在linux中生成和传递信号。

当内核收到任何信号请求时,它会为进程设置信号挂起标志,前提是信号未被阻止。现在,在返回用户模式之前,内核检查是否存在用于进程的非阻塞待处理信号。如果是,那么内核更喜欢在返回用户模式之前传递该信号。 现在回答你的问题:

  

如果有待处理信号(比如SIGUSR1)已经解锁,

我假设信号(SIGUSR1)首先被阻止,之后被解锁。在这种情况下,当用户尝试解锁信号时,将在用户进程以用户模式恢复之前传递信号。对于前者如果app.get('/check_timewindow_orders', session, function(req, res, next){ req.session.delvy_date = req.query.date_select; }); app.use(session, function(req, res, next) { res.locals.delvy_date = req.session.delvy_date; next(); }); 用于取消阻止信号,那么即使在sigprocmask()返回之前也会传递信号。

  

将信号SIGUSR1通过调用传递给进程   sigprocmask()在保持SIGUSR1的同时解除阻塞不同的信号   畅通?

如果多个待处理信号未被阻塞并准备交付,那么内核会选择信号最低的信号(当然,同步信号的优先级高于异步信号),以便首先传输。