是否可以更改另一个进程中的信号处理程序?

发布于 2024-09-14 03:45:26 字数 100 浏览 3 评论 0 原文

我今天发现了 nohup 工具,并且想知道它的实现。具体来说,似乎必须有一种方法来告诉另一个进程或子进程忽略某些信号。是否有系统调用或类似的东西可以做到这一点?

I found out the nohup tool today, and was wondering about it's implementation. Specifically, it seems like there must be a way to tell another process, or a child process, to ignore certain signals. Is there a system call, or something like that, that does this?

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

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

发布评论

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

评论(3

春花秋月 2024-09-21 03:45:26

nohup 只是exec 的命令,您在忽略HUP 信号后给出它。从源代码来看:

signal (SIGHUP, SIG_IGN);
/* skipping some stuff ... */
execvp (*cmd, cmd);

我假设这意味着如果指定的命令执行类似以下操作:

signal (SIGHUP, SIG_DFL);  /* restore default HUP signal handler */

nohup 将无法正常工作。

nohup simply exec's the command you give it after ignoring the HUP signal. From the source code:

signal (SIGHUP, SIG_IGN);
/* skipping some stuff ... */
execvp (*cmd, cmd);

I'm assuming this means that if the specified command did something like:

signal (SIGHUP, SIG_DFL);  /* restore default HUP signal handler */

nohup wouldn't work properly.

初雪 2024-09-21 03:45:26

来源与您同在:)

免责声明:这句话实际上不是我的,而是 Marshall Kirk McKusick 的。

May the source be with you :)

Disclamer: the phrase is actually not mine, but of Marshall Kirk McKusick.

梦萦几度 2024-09-21 03:45:26

进程在 exec 调用后保留信号掩码。

请参阅此处的 nohup 源代码,例如:

http:// /www.opensource.apple.com/source/shell_cmds/shell_cmds-118/nohup/nohup.c

有关 exec() 调用的详细信息,请参见此处:

http://www.opengroup.org/onlinepubs/009695399/functions/exec.html

即:

新进程至少应继承
以下属性来自
调用过程图:

... 处理信号掩码(参见
sigprocmask())

Process preserves signal mask after exec call.

See sources for nohup here, for example:

http://www.opensource.apple.com/source/shell_cmds/shell_cmds-118/nohup/nohup.c

For the details on exec() call see here:

http://www.opengroup.org/onlinepubs/009695399/functions/exec.html

Namely:

The new process shall inherit at least
the following attributes from the
calling process image:

... Process signal mask (see
sigprocmask())

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