微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么这个程序在init / reboot / shutdown时收不到SIGTERM?

我需要拦截重启或关机。 prgram是这样的:

void sig_handler(int sig) { if (sig == SIGTERM) { /* do something */ } } int main() { .... signal(SIGTERM,sig_handler); /* daemon */ pid = fork(); if (pid > 0) exit(EXIT_SUCCESS); // I didn't do setsid() to retain process group id. .... }

当我通过“杀-15”进行testing时,这是有效的。 但是,当我尝试“重新启动”或“关机”命令,它从来没有收到信号。 init手册页说:

“当init被要求改变运行级别时,它会发送警告信号SIGTERM给所有在新的运行级别中未定义的进程,然后等待5秒钟,然后通过SIGKILL信号强制终止这些进程注意init假定所有这些进程(及其后代)仍然保留在原来为它们创build的同一个进程组中,如果任何进程改变其进程组联系,它将不会收到这些信号,这些进程需要单独终止。

如何告诉init守护进程发送SIGTERM到这个程序? 我的猜测是我应该把进程组ID设置为init知道的东西,但我该怎么做呢?

尝试在Windows上的Hotspot JVM中处理SIGBREAK时发生IllegalArgumentException

从信号处理程序打印堆栈跟踪

从父母发送信号到孩子

在perl中收到任何信号时睡眠是否会中断?

Where或How,我可以在TDaemonApplication上将我的代码挂接到Unix信号(主要是SIGHUP)吗?

如何拦截linux信号? (在C)

在Linux中使用Signal发送信息

一个进程可以通过一个systemtap探针停止,所以gdb可以连接?

信号没有传送很长时间(约20秒)

信号处理问题

如果你的程序不是由init系统启动的,它将不会被init系统管理。 从init.d脚本启动它来获得所描述的好处。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐