博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
信号的概念
阅读量:7055 次
发布时间:2019-06-28

本文共 1384 字,大约阅读时间需要 4 分钟。

信号的概念

信号(signal)--     进程之间通讯的方式,是一种软件中断。一个进程一旦接收到信号就会打断原来的程序执行流程来处理信号。

几个常用信号:

SIGINT     终止进程  中断进程  (control+c)

SIGTERM   终止进程     软件终止信号

SIGKILL   终止进程     杀死进程

SIGALRM 闹钟信号

 

进程结束信号 SIGTERM和SIGKILL的区别

SIGTERM比较友好,进程能捕捉这个信号,根据您的需要来关闭程序。在关闭程序之前,您可以结束打开的记录文件和完成正在做的任务。在某些情况下,假如进程正在进行作业而且不能中断,那么进程可以忽略这个SIGTERM信号。

对于SIGKILL信号,进程是不能忽略的。这是一个 “我不管您在做什么,立刻停止”的信号。假如您发送SIGKILL信号给进程,Linux就将进程停止在那里。

 

发送信号一般有两种原因:

1(被动式)  内核检测到一个系统事件.例如子进程退出会像父进程发送SIGCHLD信号.键盘按下control+c会发送SIGINT信号

2(主动式)  通过系统调用kill来向指定进程发送信号

 

 

操作系统规定了进程收到信号以后的默认行为

但是,我们可以通过绑定信号处理函数来修改进程收到信号以后的行为

有两个信号是不可更改的SIGTOP和SIGKILL

绑定信号处理函数

import os  import signal  from time import sleep     def onsignal_term(a,b):      print '收到SIGTERM信号'     #这里是绑定信号处理函数,将SIGTERM绑定在函数onsignal_term上面  signal.signal(signal.SIGTERM,onsignal_term)     def onsignal_usr1(a,b):      print '收到SIGUSR1信号'  #这里是绑定信号处理函数,将SIGUSR1绑定在函数onsignal_term上面  signal.signal(signal.SIGUSR1,onsignal_usr1)     while 1:      print '我的进程id是',os.getpid()      sleep(10)

运行该程序。然后通过另外一个进程来发送信号。

发送消息的代码如下:
 
import os  import signal     #发送信号,16175是前面那个绑定信号处理函数的pid,需要自行修改  os.kill(16175,signal.SIGTERM)  #发送信号,16175是前面那个绑定信号处理函数的pid,需要自行修改  os.kill(16175,signal.SIGUSR1)

 

 
使用信号需要特别注意的地方

如果一个进程收到一个SIGUSR1信号,然后执行信号绑定函数,第二个SIGUSR2信号又来了,第一个信号没有被处理完毕的话,第二个信号就会丢弃。

所以,尽量不要在多线程中使用信号。

这个不妥,测试没发现有信号丢失

例子演示:

接收信号的程序,你会发现如果有另外一端使用多线程向这个进程发送信号,会遗漏一些信号。

转载于:https://www.cnblogs.com/Vito2008/p/5190174.html

你可能感兴趣的文章
031 分布式中,zookeeper的部署
查看>>
persits.jpeg 水印组件
查看>>
Android IntentService完全解析 当Service遇到Handler
查看>>
单例模式
查看>>
Android资源(图片)命名规范
查看>>
java 大文件上传 断点续传 完整版实例 (Socket、IO流)
查看>>
LeetCode: Merge Two Sorted Lists 解题报告
查看>>
海报:Silverlight 1.1
查看>>
[cpp] I/O操作符号返回数值问题
查看>>
你有哪些用计算机技能解决生活问题的经历?
查看>>
SpringMVC 拦截器实现分析
查看>>
從此不再談jquery,马上忘掉他开始学Mootools
查看>>
android悬浮窗语音识别demo
查看>>
Vue -- Mixin
查看>>
【NoSQL】memcached介绍
查看>>
使用HeadlessChrome做单页应用SEO
查看>>
[iOS]Core Data浅析二 -- 转换实体(Entity)为模型对象
查看>>
thinkpad 系列恢复F1-F12原始功能,切换ctrl和fn的位置
查看>>
JavaScript算法 ,Python算法,Go算法,java算法,系列之归并排序
查看>>
基于 React 的前端项目开发总结
查看>>