管理 fork() 守护进程的信号处理

发布于 2024-08-15 20:09:30 字数 695 浏览 6 评论 0原文

我想用 perl 编写一个强大的守护进程,它将在 Linux 上运行,并遵循描述的模板 在这个优秀的答案中。但是,我的情况有一些差异:首先,我使用 Parallel::ForkManager 开始()和下一个; fork 一个事件,紧接着 exec('handle_event.pl')

在这种情况下,我有以下问题:

  1. 我应该在哪里定义我的信号处理程序。我应该在父级(守护进程)中定义它们并假设它们将在子级中继承吗?
  2. 如果我运行 exec('handle_event.pl') 处理程序是否会在 exec 中继承(我知道它们是在 fork 中继承)?
  3. 如果我在 handle_event.pl 中重新定义一个新的信号处理程序,该定义是否会覆盖父级中定义的信号处理程序?
  4. 在这种情况下,最佳做法是什么?

谢谢

I want to write a robust daemon in perl that will run on Linux and am following the template described in this excellent answer. However there are a few differences in my situation: First I am using Parallel::ForkManager start() and next; to fork on an event immediately followed by exec('handle_event.pl')

In such a situation, I have the following questions:

  1. Where should I define my signal handlers. Should I define them in the parent (the daemon) and assume that they will be inherited in the children?
  2. If I run exec('handle_event.pl') will the handlers get inherited across the exec (I know that they are inherited across the fork)?
  3. If I re-define a new signal handler in handle_event.pl will this definition override the one defined in the parent?
  4. What are best practices in a situation like this?

Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一紙繁鸢 2024-08-22 20:09:31

当您分叉时,子进程具有与父进程相同的信号处理程序。当您执行时,任何被忽略的信号仍然被忽略;任何已处理的信号都会重置回默认处理程序。

When you fork, the child process has the same signal handlers as the parent. When you exec, any ignored signals remain ignored; any handled signals are reset back to the default handler.

尴尬癌患者 2024-08-22 20:09:31

exec 将整个进程代码替换为将要执行的代码。由于信号处理程序是进程映像中的代码,因此它们不能跨 exec 继承,因此 exec 会将已处理信号的信号处理配置重置为其默认状态(忽略信号)将保持忽略状态)。因此,您需要在启动时在 execed 进程中安装任何信号处理。

The exec replaces the whole process code with the code that will be executed. As signal handlers are code in the process image, they cannot be inherited across an exec, so exec will reset the signal handling dispositions of handled signals to their default states (ignored signals will remain ignored). You will therefore need to install any signal handling in the execed process when it starts up.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文