![]() |
1
2
正如您发现的那样,您不能调用sig_dfl和sig_ign 本身 . 然而,你可以或多或少地模仿他们的行为。 简言之,模拟正常信号配置将是:
这是你想要的吗?
更新 (回应OP的优秀问题)
对。类似:
与三个系统调用(重新提升、取消屏蔽、重新屏蔽)相比,noop在用户空间中的效率稍高。此外,当sig_被忽略时,chld具有特殊的语义。
最初(检查答案编辑)我没有——在sig-ign案例中重新提出它, 因为 IGNored CHLD signals tell the kernel to automatically reap children . 但是,我改变它是因为 "natural" CHLD signals carry information about the terminated process (至少是PID、状态和实际UID)。 用户生成的chld信号没有相同的语义,在我的测试中, 忽略它们不会导致2.6自动调整排队的僵尸的信号。 被“错过”了。所以,我自己做。
如果我们停止(不执行)并且cont被阻止,我们将永远不会收到 唤醒我们的信号!
个人偏好;
|
![]() |
2
1
我在你的代码中看到两个错误:
2)必须将函数处理程序传递给fiedl sa_处理程序,而不是int。函数的原型应如下所示:
如果希望调用默认处理程序,则应设置字段 萨哈德勒 到 西格尔德福 它应该是有效的。 |
![]() |
3
1
我不知道怎么做。
我唯一的建议是调查
当然,您也可以将信号处理程序设置回sig_dfl,然后
|
![]() |
Christopher · 从角度信号中删除未定义的结果 1 年前 |
|
elfilado · 基于信号值分配Observable 1 年前 |
![]() |
Shay · `waitpid`一个已经被waitpid'处理的进程 2 年前 |