You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用exec()后进程已设置的信号处理程序会发生什么变化?

exec类系统调用对信号处理程序的影响

执行exec()类系统调用成功加载新程序后,原进程设置的信号处理配置不会全部保留,具体规则如下:

  • 所有绑定了自定义捕获处理函数的信号,处理逻辑会被统一重置为系统默认行为(SIG_DFL)。
    这是因为exec调用会完全替换当前进程的地址空间,把旧程序的代码段、数据段全部清掉,换成新可执行文件的内容。你之前注册的信号处理函数是旧程序里的代码,新程序的内存里根本找不到这个函数的地址,不具备执行条件,自然不可能保留。
  • 原先被设置为SIG_IGN(忽略信号)的配置,默认会在exec后保留。
    这里存在实现差异:针对SIGCHLD信号的忽略配置,POSIX标准没有做强制要求,不同操作系统的处理逻辑可能不一样,Linux环境下会保留忽略配置。
  • SIGKILL、SIGSTOP这两个信号本身就不允许自定义处理、不允许被忽略,exec前后始终走系统默认逻辑,不存在重置或者保留的问题。

和你提到的fork()场景逻辑不同:fork只是创建子进程并复制父进程的地址空间,信号处理函数的地址在子进程里依然有效,所以子进程会完整继承父进程的信号处理配置,这和exec替换整个程序映像的逻辑有本质区别。

内容的提问来源于stack exchange,提问作者Rowooz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 16:03:32