打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
reboot发送SIGTERM给进程
关于SIGTERM信号,reboot等想进程发送SIGTERM信号时子进程无法获取该信号原因
SIGTERM 程序结束(terminate)信号,与SIGKILL不同的是该信号可以被阻塞和处理。 通常用来要求程序自己正常退出。 shell命令kill缺省产生这 个信号。
一个后台程序,在系统重启时会做一些保存工作,可以用signal()对SIGTERM进行了处理。让后台程序运行,用命令kill   -15     PID,保存工作运行良好。但是实际测试,用命令   reboot,后台进程却不能接收到SIGTERM信号,未进行保存工作。同样都是发送SIGTERM信号给进程(kill和reboot),为什么处理不一样?
经过查资料和思考,终于发现如果这个程序脱离任何终端,在后台运行,那么它能接收到SIGTERM信号,并按要求执行。但是我做测试的时候,它是在一个终端上运行程序的,属于此终端的一个子进程。在reboot命令的后,终端先关闭了,此进程随即结束,并未收到SIGTERM信号。reboot命令后发送的SIGTERM信号是按PID从小到大发送的;当父进程接收到SIGTERM信号后,向子进程发送SIGKILL信号立即结束。原因应该是同一个session里的组长进程被杀,其他进程也被杀。要解决这个问题,程序里必须显示的调用setsid()或者setpgid()脱离这个终端。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
进程管理ps,优先级,top命令
Linux kill、kill
四、Python Signal 信号
你是怎么在 Linux 干掉进程的?
Linux - 基础命令之kill与ctrl c的区别
进程管理类命令
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服