假设您处于单线程进程中,并且相关信号未被阻止或忽略,是否可以保证:
kill(getpid(), sig);
会导致在执行下一行代码之前传递信号吗?
特别是,如果信号是一个没有处理程序的信号并且整个默认操作是终止进程(例如SIGTERM,SIGALRM),是否保证不会执行下一行代码?
我一直认为(至少在 Linux 上)答案是“是”,因为我认为在从任何系统调用返回之前,内核总是会检查是否有任何未决的信号,如果有,则传递它们。但我想我已经观察到(当在重负载的多核系统上运行时)情况并非总是如此,尽管这很难重现,所以我很感激确认我没有看到任何东西。
[这个问题非常类似于Is a signal sent with kill to a parent thread是否保证在下一条语句之前被处理?除了那个问题是关于多线程进程的问题(答案肯定是“否”),而这个问题是关于单线程进程的。]