python Linux 信号编程 signals

1. Signal介绍

  软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。注意,信号只是用来通知某进程发生了什么事件,并不给该进程传递任何数据。信号是进程控制的一部分,也是 Linux编程中非常重要的部分。

  

  • signal允许异步处理事件。
  • SIGKILL信号就是在发送kill -9所产生的信号。
  • 使用信号编程其实并不难。

      在终端下输入man 7 signal查看signal的类型:

      

2. 编程示例

  使用python编程的主要步骤为:

  1)、导入signal模块。

  2)、编写信号处理函数。

  3)、绑定信号和信号处理函数。

  4)、处理信号

  以SIGINT为例,编写sigtest.py。然后用“CTRL+C”中断

  

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import signal

def ctrlc_handler(sig_num, frm):
    print "啦啦,你结束不了我^_^"

print "Init signal handler..."

signal.signal(signal.SIGINT, ctrlc_handler)

print "Done !"

while True:
    pass

从结果上看,确实是我们自定义的信号处理函数在运行。

有人问,那程序结束不了了怎么办?不用担心,用ps命令列出进程列表,找到其PID,然后Kill掉就可以了。

时间: 2024-10-11 06:57:01

python Linux 信号编程 signals的相关文章

Linux信号实践(1) --Linux信号编程概述

中断 中断是系统对于异步事件的响应, 进程执行代码的过程中可以随时被打断,然后去执行异常处理程序; 计算机系统的中断场景:中断源发出中断信号 -> CPU判断中断是否屏蔽屏蔽以及保护现场 -> CPU(查询中断向量表, 找到中断服务程序的入口地址)执行中断处理程序 ->(处理完中断之后) ->恢复现场,继续执行原来的任务 中断分类 硬件中断(外部中断) 外部中断是指由外部设备通过硬件请求的方式产生的中断,也称为硬件中断 软件中断(内部中断) 内部中断是由CPU运行程序错误或执行内部

Linux -- 信号编程

进程捕捉到信号对其进行处理时,进程正在执行的正常序列就被信号处理程序临时中断,它首先执行该信号处理程序中的指令.如果从信号处理程序返回(例如没有调用exit或longjmp),则继续执行在捕捉到信号时进程正在执行的正常指令序列. 1. 在信号处理程序中,我们要保证调用"异步信号安全"的函数,即可重入的函数 不可重入的函数大多(a)已知它们使用静态数据结构.(b)它们调用malloc或free(c)它们是标准I/O函数 2. 由于每个线程只有一个errno变量,所以信号处理程序可能会修改

Linux文件编程实例

//捕获fopen调用中的错误 #include <stdio.h> #include <errno.h> #include <string.h> #define MYFILE "missing.txt" int main(  ) { FILE* fin; fin=fopen( MYFILE,"r" ); if( fin==(FILE*)NULL ) { printf( "%s: %s\n",MYFILE,st

[linux环境编程] 信号的基本概念与操作函数

[linux环境编程] 信号的基本概念与操作函数 一.基本的概念 1.中断的基本概念 中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的CPU暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件服务的程序中去,服务完毕后再返回去继续运行被暂时中断的程序. 而在Linux中通常分为外部中断(又叫硬件中断)和内部中断(又叫异常). 硬中断:来自硬件设备的中断 软中断:来自其它程序的中断 2.信号的基本概念 信号是软件中断,提供了一种处理异步事件的方法,可以把他看作是进

运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程,把获取的信息存入数据库

运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程 有关前两篇的链接: 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 运用Python语言编写获取Linux基本系统信息(二):文件系统使用情况获取 一.实验环境: Python2.7.10.pycharm.VM虚拟机.CentOS6.3.mysql 二.MySQLdb模块: MySQLdb模式是Python中专门连接MySQL数据库的模块,另外Python开发环境的搭

linux系统编程之信号(四)

今天继续探讨信号相关的东东,话不多说,正入正题: 信号在内核中的表示: 下面用图来进一步描述这种信号从产生到递达之间的状态(信号阻塞与未诀): 那是怎么来决定的呢?下面慢慢来举例分解: 所以,通过这些图,可以描述信号从产生到递达的一个过程,上面的理解起来可能有点难,下面会用代码来进一步阐述,在进行实验之前,还需了解一些函数的使用,这些函数在实验中都会被用到,也就是信号集操作函数. 信号集操作函数: 其中解释一下sigset_t,百度百科解释为: 而这个函数的意义就是将这64位清0 这个函数的意义

linux应用开发-信号编程

linux应用开发-信号编程 一 信号用于进程间通信 信号定义在/usr/include/asm/signal.h下 常见的信号有: SIGKILL杀死进程 SIGSTOP暂停进程 SIGCHLD子进程停止或者结束时通知父进程 二 相关的函数 发送信号 函数名    kill 函数原形  int kill(pid_t pid, int sig) 函数功能  向任何的进程和进程组发送信号 所属头文件 #include <sys/types.h> #include <signal.h>

Linux环境编程之信号(一):信号基本概述

引言 假如在后台运行一个可执行程序./a.out,如果想终止该程序,通常会按下Ctrl-C,从而产生一个中断,其实这个过程的实现就是通过信号完成的.信号是软件中断,它提供了一种处理异步事件的方法. (一) 每个信号都有一个名字,这些名字都以三个字符SIG开头.例如SIGALARM是闹钟信号,当由alarm函数设置的计时器超时后产生此信号.Linux除支持31种不同信号外,还支持应用程序额外定义信号.信号定义在<bits/signum.h>中,也可以通过命令kill -l查看. (二)信号的产生

Linux环境编程之信号(三):一些信号函数

(一)kill和raise函数 kill函数将信号发送给进程或进程组.raise函数则允许进程自身发送信号. #include <sys/types.h> #include <signal.h> int kill(pid_t pid, int sig); int raise(int  signo);  //返回值:若成功则返回0,若出错则返回-1. 参数:pid参数有4种情况:1.pid > 0 将信号发送给进程为pid的进程.2.pid == 0 将该信号发送给与发送进程属