Linux 之 信号

Posted _NiuLi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 之 信号相关的知识,希望对你有一定的参考价值。

一、信号的产生

Linux下信号的产生可分为一以下三种方式:

1、通过终端按键产生

当我们编写一个死循环的代码,执行代码时进程无法终止时,这时可以通过按键<C-c> 或者<C-z>来终止进程。<C-c>会产生一个SIGINT信号,<C-z>会产生一个SIGTSTP信号,这两个信号都会使前台进程终止。


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

#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid,int sig);
void raise(int signo); 


上面的三个函数可以向进程发送信号,kill(pid_t, int)可以给指定进程发送指定信号,raise(int) 可以向当前进程发送指定信号,abort() 会使当前进程收到异常而终止。代码如下:当输出六次pid is xxx 后进程会收到信号而终止。


或者可将kill(getpid(), SIGINT)替换为 raise(SIGINT) 

运行结果如下:



3、由软件条件产生

比如alarm()函数和SIGALRM信号。alarm()的函数原型如下:

alarm函数可以设定一个闹钟,当时间到时,系统会向当前进程发送一个SIGALRM信号,该信号的默认处理动作时终止该进程。

#include <unistd.h>
unsigned int alarm(unsigned int second);



执行上面的代码,进程会在1s收到SIGALRM信号而终止。


二、信号的









 
 








以上是关于Linux 之 信号的主要内容,如果未能解决你的问题,请参考以下文章

Linux之信号详解

Linux之信号集

Linux系统编程之进程间通信之浅谈信号

Linux 进程间通信系列之 信号

Linux之信号阻塞集

Linux 编程之信号篇:异常监控必知必会