【发布时间】:2014-07-10 00:06:03
【问题描述】:
每当我发出重启命令时,我的进程都会收到 SIGTERM 信号并正在处理它。如果 SIGTERM 将要重新启动,我不想处理它。
请给我建议。
当我执行system("reboot") 时,有什么方法可以向我的进程发送kill -9 信号?
我正在使用 Cent OS (Linux)。
【问题讨论】:
每当我发出重启命令时,我的进程都会收到 SIGTERM 信号并正在处理它。如果 SIGTERM 将要重新启动,我不想处理它。
请给我建议。
当我执行system("reboot") 时,有什么方法可以向我的进程发送kill -9 信号?
我正在使用 Cent OS (Linux)。
【问题讨论】:
每当我发出重启命令时,我的进程都会收到 SIGTERM 信号并正在处理它。如果 SIGTERM 将要重新启动,我不想处理它。
您可以尝试在您的信号处理程序中运行/sbin/runlevel(好吧,也许在信号处理程序中甚至不可能产生进程)以获取当前运行级别。运行级别 6 正在重新启动。
当我执行系统(重启)时,有什么方法可以向我的进程发送 kill -9 信号。
如果您的进程是由 init 脚本启动的,您可以更改脚本,以便使用 kill -KILL 而不是其他内容来执行停止。
我正在使用 Cent OS(linux)。
我不知道以下是否适用于 CentOS。
在 Debian 中,所有剩余的进程(运行完所有终止脚本后仍然存在的进程)由 /etc/init.d/sendsigs 发出信号。如果您有管理员权限,您可以尝试自定义它,以便在没有 TERMing 之前将一个特别命名的进程(您的)杀死。
不过,/run/sendsigs.omit 中相关的所有 pid 以及 /run/sendsigs.omit.d/ 中文件中相关的所有 pid 都没有收到任何信号。
【讨论】:
如果您的进程正在发出重新启动系统的命令,那么它显然知道重新启动即将到来。预先设置适当的信号处理程序,例如
signal(SIGTERM, SIG_IGN); // or SIG_DFL to restore default action (terminate process)
system("reboot");
在系统停止之前,您的进程最终仍会被终止(通过SIGKILL),但这要等到重新启动过程的稍后时间才会发生。
【讨论】:
我为上面的问题找到了解决方案,只想在这里更新。 在 /etc/init.d 中有一个文件“halt”。 此停止仅在运行级别 0 和 6 上执行。 我在向所有进程发送 SIGTERM 之前添加了一行“pkill -9 processname”。
【讨论】: