我知道,由于类 Unix 内核的 PID 重用,如果在 PID 已经被收获之后发送信号,则信号可能会被传送到错误的进程。
下文的讨论可能必然取决于我们讨论的具体内核,因此我很乐意将讨论范围缩小到 Linux。不过我欢迎其他内核专家的回答。
需要考虑的几种情况:
假设我正在调用
kill(2)
僵尸进程(即,我已经在内核空间中并执行内核代码来启动信号)。同时,僵尸进程的父进程调用wait(2)
。我对的调用是否kill(2)
可能最终尝试对其他进程采取行动?假设我已经对
kill(2)
一个进程执行了 -ed(即成功从调用返回到用户空间),但在传递我的信号之前,另一个信号被捕获并终止了该进程。在这种情况下,我假设我的信号肯定会被丢弃?原因之一是:即使 PID 被捕获并且同时生成了具有相同 PID 的另一个进程,将信号传递给新进程也可能会打开权限漏洞。
谢谢