Linux信号1

来源:互联网 发布:unity3d制作的小游戏 编辑:程序博客网 时间:2024/06/13 04:28

一、信号基本概念。

       信号简单的来说它就是以中国通知机制,它是为了响应某个事件而产生的,接收到相关信号的进程就会去执行对应的动作。接收到信号的进程会先在自己的PCB中记下相关信息,等到合适的时候去处理这个信号。

可以使用kill -l命令查看当前系统定义的信号列表:

二、信号产生的条件

1.用户在终端按下某些键时,终端驱动程序会发送信号给前台进程。

2.硬件异常产生信号,由硬件通知内核,然后内核向当前进程发送适当的信号。

3.一个进程调用kill函数可以给另一个进程发送信号。

三、处理信号的动作

1.忽略此信号。

2.执行该信号的默认处理动作。

3.提供一个信号处理函数,这个函数是由用户提供的,让进程执行自己指定的函数动作。这种方式称为捕捉一个信号。

四、产生信号

1.通过终端按键产生信号

我们先来解释一下关于核心转储的问题:Core Dunp,是当一个进程要异常中止时,可以选择把进程的用户空间内存数据全部保存到磁盘上。

使用ulimit -a查看当前core文件大小:

可以使用ulimit -c 10240设置core文件大小:

一般core文件大小默认是0,因为为了保护用户隐私安全同时也为了内存考虑,防止占用过多空间。

再来认识一下signal函数:

这个函数是为了捕捉一个信号,第一个参数是指的是捕捉的哪个信号,第二个参数是捕捉到信号后,进程需要去执行的动作,是个函数指针类型。

一下程序捕捉到的分别是2号和8号信号:

2.调用系统函数向进程发信号

kill命令是通过调用Kill函数实现的。kill函数可以给指定的进程发送一个信号,raise函数可以是当前进程自己给自己发送一个信号,abort函数使当前进程接收到信号而终止。

用kill函数写一个mykill程序,如下所示:




0 0