2014-07-10 41 views
2

每当我给出重启命令时,我的进程正在接收SIGTERM信号并正在处理它。如果SIGTERM由于重新启动,我不想处理它。处理系统重启产生的信号

请给我任何想法。

当我做system("reboot")时,有什么办法可以发送kill -9信号给我的程序吗?

我正在使用Cent OS(Linux)。

回答

1

无论何时我给重新启动命令,我的进程正在接收SIGTERM信号并正在处理它。如果SIGTERM由于重新启动,我不想处理它。

你可以尝试在你的信号处理程序运行/sbin/runlevel(好吧,也许过程产卵甚至是不可能的信号处理程序虽然)来获得当前的运行级别。运行级别6重新启动。

有没有办法发送kill -9信号到我的进程当我做系统(重新启动)。

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

我正在使用Cent OS(linux)。

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

在Debian中,所有剩余的进程(在所有kill脚本运行后都运行的进程)通过/etc/init.d/sendsigs发送信号。如果您有管理员访问权限,则可以尝试对其进行自定义,以便特殊命名的进程(您的)在没有TERMing的情况下获得KILL。

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

0

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

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

你的过程将最终仍然被打死(通过SIGKILL)系统停机权之前,但是这不会发生,直到在重启过程中稍晚。

+1

我如何处理,如果我在Linux控制台中运行重新启动。 – user3822453

0

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