免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 33327 | 回复: 13

关于SIGTERM信号 [复制链接]

论坛徽章:
0
发表于 2005-12-13 10:13 |显示全部楼层
我写了一个后台程序,在系统重启时会做一些保存工作。因此用signal()对SIGTERM进行了处理。测试时让后台程序运行,用命令kill -15  PID,保存工作运行良好。但是实际测试,我用命令 reboot,后台进程却不能接收到SIGTERM信号,未进行保存工作。
  同样都是发送SIGTERM信号给进程(kill和reboot),为什么处理不一样?请指点。

论坛徽章:
0
发表于 2005-12-13 11:30 |显示全部楼层
>> 我用命令 reboot,后台进程却不能接收到SIGTERM信号,未进行保存工作。
不可能吧? 内核中要reboot的时候,首先会发送SIGTERM给进程,然后发送SIGKILL。

论坛徽章:
0
发表于 2005-12-13 14:19 |显示全部楼层
我是实际测试过的。而且不止一次,所以感觉很迷惑。

论坛徽章:
0
发表于 2005-12-13 17:41 |显示全部楼层
你的备份工作要做多长时间? 在发送完SIGTERM以后,shutdown可能会等待3秒左右的时间就会再发SIGKILL。

论坛徽章:
0
发表于 2005-12-14 08:56 |显示全部楼层
很快,不到一秒。

论坛徽章:
0
发表于 2005-12-14 13:20 |显示全部楼层
昨晚看UNPv1,也提到这个问题,确实是先SIGTERM再SIGKILL,要尽快handle SIGTERM,不然来不及。

论坛徽章:
0
发表于 2005-12-14 15:24 |显示全部楼层
找到问题的原因了。其实不是信号的问题。
    如果这个程序脱离任何终端,在后台运行,那么它能接收到SIGTERM信号,并按要求执行。但是我做测试的时候,它是在一个终端上运行程序的,属于此终端的一个子进程。在reboot命令的后,终端先关闭了,此进程随即结束,并未收到SIGTERM信号。
    具体没查到资料,但是可以猜测几点:reboot命令后发送的SIGTERM信号是按PID从小到大发送的;当父进程接收到SIGTERM信号后,向子进程发送SIGKILL信号立即结束。

论坛徽章:
0
发表于 2005-12-14 15:56 |显示全部楼层
原帖由 yyy790601 于 2005-12-14 15:24 发表
找到问题的原因了。其实不是信号的问题。
    如果这个程序脱离任何终端,在后台运行,那么它能接收到SIGTERM信号,并按要求执行。但是我做测试的时候,它是在一个终端上运行程序的,属于此终端的一个子进程。在 ...


unix经典进程关系我不太熟悉,但似乎不是父子关系的进程间会“一个被杀,子进程也被杀”, 好象是同一个session里的组长进程被杀,其他进程就被杀。

盼熟悉这块的朋友讲一下

论坛徽章:
0
发表于 2005-12-14 17:31 |显示全部楼层
原帖由 albcamus 于 2005-12-14 15:56 发表


unix经典进程关系我不太熟悉,但似乎不是父子关系的进程间会“一个被杀,子进程也被杀”, 好象是同一个session里的组长进程被杀,其他进程就被杀。

盼熟悉这块的朋友讲一下

父进程就是组长。
除非子进程显式地 setpgid

论坛徽章:
0
发表于 2005-12-14 19:39 |显示全部楼层
原帖由 思平 于 2005-12-14 17:31 发表

父进程就是组长。
除非子进程显式地 setpgid


多谢大侠
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP