每当我发出reboot命令时,我的进程正在接收SIGTERM信号并正在处理它。如果SIGTERM需要重启,我不想处理它。
请建议我。
当我kill -9
时,有没有办法向我的流程发送system("reboot")
信号?
我正在使用Cent OS(Linux)。
答案 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”。