处理系统重启产生的信号

时间:2014-07-10 00:06:03

标签: c linux process

每当我发出reboot命令时,我的进程正在接收SIGTERM信号并正在处理它。如果SIGTERM需要重启,我不想处理它。

请建议我。

当我kill -9时,有没有办法向我的流程发送system("reboot")信号?

我正在使用Cent OS(Linux)。

3 个答案:

答案 0 :(得分:1)

  

每当我发出重启命令时,我的进程正在接收SIGTERM信号并正在处理它。如果SIGTERM重新启动,我不想处理它。

您可以尝试在信号处理程序中运行/sbin/runlevel(尽管可能在信号处理程序中甚至无法进行过程生成)以获取当前的运行级别。运行级别6重启。

  

当我执行系统(重启)时,有没有办法向我的进程发送kill -9信号。

如果您的进程是由init脚本启动的,您可以更改脚本,以便使用kill -KILL而不是其他内容执行停止。

  

我正在使用Cent OS(linux)。

我不知道以下是否适用于CentOS。

在Debian中,所有剩余的进程(在所有kill脚本运行后仍处于活动状态的进程)由/etc/init.d/sendsigs发出信号。如果你有管理员权限,你可以尝试自定义它,这样一个特别命名的进程(你的)就可以在没有TERMing的情况下被杀死了。

尽管如此,/run/sendsigs.omit中相关的所有pid以及/run/sendsigs.omit.d/中与文件相关的所有pid都没有收到任何信号。

答案 1 :(得分:0)

如果您的进程发出重启系统的命令,显然它知道重启即将到来。让它事先设置适当的信号处理程序,例如

signal(SIGTERM, SIG_IGN); // or SIG_DFL to restore default action (terminate process)
system("reboot");

在系统停止之前,您的进程最终仍将被终止(通过SIGKILL),但直到稍后重启过程才会发生这种情况。

答案 2 :(得分:0)

我找到了上面问题的解决方案,只是想在这里更新。 在/etc/init.d中有一个文件“halt”。 此暂停仅在运行级别0和6上执行。 我在它向所有进程发送SIGTERM之前添加了一行“pkill -9 processname”。