当前位置: 技术问答>linux和unix
关于SIGTERM信号?
来源: 互联网 发布时间:2015-11-02
本文导语: 我写了一个后台程序,在系统重启时会做一些保存工作。因此用signal()对SIGTERM进行了处理。测试时让后台程序运行,用命令kill -15 PID,保存工作运行良好。但是实际测试,我用命令 reboot,后台进程却不能接收...
我写了一个后台程序,在系统重启时会做一些保存工作。因此用signal()对SIGTERM进行了处理。测试时让后台程序运行,用命令kill -15 PID,保存工作运行良好。但是实际测试,我用命令 reboot,后台进程却不能接收到SIGTERM信号,未进行保存工作。
同样都是发送SIGTERM信号给进程(kill和reboot),为什么处理不一样?请指点。
同样都是发送SIGTERM信号给进程(kill和reboot),为什么处理不一样?请指点。
|
reboot在正常运行的系统相当于halt,它们等价于shutdown -r或者shutdown -h
你的问题我也不是太清楚,但是可以给你一些建议,你可以用
shutdown -r +5
试一下, 表示5分钟后reboot. 有的时候进程会因为来不及结束而在结束时显示一些错误信息.
你的问题我也不是太清楚,但是可以给你一些建议,你可以用
shutdown -r +5
试一下, 表示5分钟后reboot. 有的时候进程会因为来不及结束而在结束时显示一些错误信息.
|
很多系统是先发送SIGTERM,然后过了一段时间后,再发送SIGKILL的。
比如,Fedora的runlevel 0脚本中:
/etc/rc0.d/S01halt
runcmd $"Sending all processes the TERM signal..." /sbin/killall5 -15
sleep 5
runcmd $"Sending all processes the KILL signal..." /sbin/killall5 -9
比如,Fedora的runlevel 0脚本中:
/etc/rc0.d/S01halt
runcmd $"Sending all processes the TERM signal..." /sbin/killall5 -15
sleep 5
runcmd $"Sending all processes the KILL signal..." /sbin/killall5 -9
|
看看reboot实现部分的shell代码,也可以根据自己需要对这个reboot做相应的修改。
|
延长一下SIGTERM的等待时间试试看呢
|
个人认为:需要在 init进程改变runlevel为6之前,让runlevel先变为1,作完你的工作后,再让runlevel变为6。实现起来,应该需要接管"shutdown -r or -h"命令,自己按照需要来处理。