linux - 在信号处理程序中调用 exec() 以重新加载当前正在运行的进程

标签 linux linux-kernel signals

当从当前进程的信号处理程序中调用 exec() 时,是否为场景定义了行为? -- 例如,有一个 SIGHUP 处理程序调用 exec() 以获取与当前正在运行的进程相同的二进制文件以重新加载自身。

最佳答案

是的,行为已定义且安全。

exec* 函数系列 — 但值得注意的是排除“路径”变体 execlpexecvp —根据 Signal Actions in § 2.4.3 的处理,异步信号是安全的在 POSIX.1-2017 中。

关于linux - 在信号处理程序中调用 exec() 以重新加载当前正在运行的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58348234/

相关文章:

在 kernel_fpu_end 之前调用 kernel_fpu_begin 两次

linux-kernel - linux/module.h : No such file or directory

c - 即使运行它们的进程很忙,signal()和alarm()也能工作吗?或者我应该在另一个专用进程上运行它?

linux - 带有正则表达式的 bash 条件

c - 鼠标 Action 的input_event成员解释

c# - MonoDevelop 无法识别 MonoBehaviour

java - Java进程的退出钩子(Hook)

linux - Vim:将 'cursor' 键 hjkl 设置为 wasd

performance - rdpmc 的 CR4.PCE 已清除

c - 最早什么时候可以注册信号处理程序?