sigaction优先级疑问

siven
🔖︎ 6 订阅
👍︎ 2 点赞

SIGINT 优先级高于 SIGSEGV
SIGSEGV 优先级高于 SIGCHLD

如果一个进程首先收到了 SIGSEGV 信号,在它正在执行该信号的处理函数时(还没有执行完),此时收到了 SIGINT 信号,不考虑信号屏蔽,此时是否会先去执行 SIGINT 的处理函数?

如果一个进程首先收到了 SIGSEGV 信号,在它正在执行该信号的处理函数时(还没有执行完),此时收到了 SIGCHLD 信号,不考虑信号屏蔽,此时是否继续执行 SIGSEGV 的处理函数,执行完毕之后再去处理 SIGCHLD?

回复主题帖

戴波(助教)
👍︎ 0 点赞
  1. 先去执行SIGINT的处理函数。

  2. 先去执行SIGCHLD处理函。

只有屏蔽信号集才会影响信号执行过程中是否被打断,优先级只会影响当多个信号待处理时的选择。


siven 回复 戴波(助教)
👍︎ 0 点赞

明白了,谢谢助教


胡睿希 回复 戴波(助教)
👍︎ 0 点赞

那如果在处理SIGILL的过程中,收到了SIGINT和SIGKILL,当前进程去处理SIGINT,那么是把SIGKILL放入等待集,还是说等待SIGINT处理结束之后就去处理SIGKILL(不管等待集中的其他信号)


戴波(助教) 回复 胡睿希
👍︎ 0 点赞

SIGKILL是不能被阻塞的,所以如果收到了SIGKILL,是会直接执行SIGKILL信号然后结束进程的;对于其他信号,信号的被打断只会与信号执行时进程的信号屏蔽集有关。


胡睿希 回复 戴波(助教)
👍︎ 0 点赞

那如果不是sigkill呢,例如处理SIGILL的时候收到了SIGINT和SIGCHLD,这两个信号都没有被屏蔽,由于优先级,先处理SIGINT,那么剩下的SIGCHLD是进入等待集(SIGINT和SIGILL都处理完后处理),还是SIGINT处理完后直接处理SIGCHLD


戴波(助教) 回复 胡睿希
👍︎ 0 点赞

先处理SIGINT,把SIGCHLD放入等待集中,如果在SIGINT处理过程中,又到了需要判断是否有待处理信号并处理时,就会先去执行SIGCHLD,然后返回SIGINT,最后返回原来的信号。


胡睿希 回复 戴波(助教)
👍︎ 0 点赞

哦哦明白了,谢谢助教!!


__cxc__ 回复 戴波(助教)
👍︎ 1 点赞

请问如果同时受到sigint和sigchld,没有任何屏蔽的情况下,sigint的handler一定先进入吗


__cxc__ 回复 戴波(助教)
👍︎ 4 点赞

另外,对于讨论区中的各个共性问题的解答,课程组能否汇总至任务指导页面?


fickle 回复 __cxc__
👍︎ 5 点赞

支持,现在的指导书感觉有点简略,给的样例也没有涉及复杂情况


MC的大虾1472 回复 戴波(助教)
👍︎ 3 点赞

求求来点猛一点的测试点,真测不出来了


廖鹏飞 回复 戴波(助教)
👍︎ 1 点赞

"又到了需要判断是否有待处理信号并处理时",这里的时机具体是什么时候,如果是笼统的返回用户态的话,好像不同的处理方式测试出来的结果还不一样

0%