-
Linux信号机制解析
- 时间:2024-11-23 07:33:04
大家好,今天Win10系统之家小编给大家分享「Linux信号机制解析」的知识,如果能碰巧解决你现在面临的问题,记得收藏本站或分享给你的好友们哟~,现在开始吧!
在Linux中信号也称为软中断,进程在收到信号之后在对信号进行处理,可以说就是一个中断的过程。本文就来为大家简单地解析一下Linux信号机制。
1、安装信号处理函数
在系统编程的层面上与信号的处理关系最直接相关的函数有两个,他们用来安装信号处理函数:
sighandler_t signal(int signum, sighandler_t handler);
int sigaction(int signum, const struct sigaction *act,,struct sigaction *oldact);
第一个函数signal比较简单,sighandler_t 是一个别名,其原型是 typedef void (*sighandler_t)(int),他是一个函数指针,接受一个类型为int的参数(信号的编号),返回void。例如要对SIGUSR1信号进行处理:
void handler(int sig)
{
//strsiganl 功能是把信号的编号转为信号说明的字符串
printf(“Rcv a signal:%s”,strsignal(sig));
}
int main()
{
signal(SIGUSR1,handler);
while(1)
;
}
(这段程序其实是有问题的,后面会说到)这段程序本来是一段死循环,但是对他发送SIGUSR1信号,程序会从while中“中断”转去执行handler中的代码。在shell中使用kill命令发送信号SIGUSR1 于是程序就答应出了一段这样的信息:Rcv a signal:User defined signal 1。signal()的用法几乎就是这么简单。但是由于可移植的原因,参与项目开发时,应该使用下面的这个函数。
sigaction()函数的参数中有两个结构体,其man手册原型如下:
struct sigaction {
void (*sa_handler)(int);
void (*sa_sigaction)(int, siginfo_t *, void *);
sigset_t sa_mask;
int sa_flags;
void (*sa_restorer)(void);
};
据我所知sa_handler和sa_sigaction其实是在一个union中,他们都是指向信号处理函数的指针。
sa_mask 是要屏蔽的信号,sa_flags 有多种选项。(关于这两点后文再细说)。从sigaction()原型中可以发现参数中有两个struct sigaction参数,其中act是要安装的信号处理,而oldact是用来带回原来的处理方式方便我们处理完信号后的恢复。如果不需要拿回之前的信号处理方式可以把第三个参数置为NULL,反之如果只想得到之前的处理方式而不像安装新的信号处理,可以把第二个参数置为NULL,这点用signal()是办不到的。用sigaction()改写上面的例子是这样的:
1 void handler(int sig)
2 {
3 printf(“Rcv a signal:%s”,strsignal(sig));
4 }
5
6 int main()
7 {
8 struct sigaction act;
9 sigemptyset(&act.sa_mask);
10 act.sa_handler = handler;
11 act.sa_flags = 0;
12 sigaction(SIGUSR1,&act,NULL);
13 while(1)
14 ;
15 }
以上就是关于「Linux信号机制解析」的全部内容,本文讲解到这里啦,希望对大家有所帮助。如果你还想了解更多这方面的信息,记得收藏关注本站~
『Win10系统之家wwW.gHost580.net①独家②使用!』
相关文章
-
在Linux中信号也称为软中断,进程在收到信号之后在对信号进行处理,可以说就是一个中断的过程。本文就来为大家简单地解析一下Linux信号机制。
1、安装信号处理函数
在系统编程的层面上与信号的处理关系最直接相关的函数有两个,他们用来安装信号处理函数:
sighandler_tsignal(intsignum,sighandler_thandler)... -
什么是Linux信号机制,Linux信号机制要讲解起来没那么简单,本文只是给大家讲解下Linux信号机制的基础知识,让你对Linux信号机制有一些了解,一起来学习下吧。
Linux进程基础一文中已经提到,Linux以进程为单位来执行程序。我们可以将计算机看作一个大楼,内核(kernel)是大楼的管理员,进程是大楼的房客。每个进程拥有一个独立的房间(属于进程的内存空间),而... -
对于Linux系统,用户们一定对它那功能强大的命令印象深刻,不过有许多Linux用户对Linux系统中的各项命令并不太熟悉,下面就和小编一起来看看Linux系统的命令吧。
Linux的命令分为内部命令和外部命令:
内部命令在系统启动时就调入内存,是常驻内存的,所以执行效率高。
外部命令是系统的软件功能,用户需要时才从硬盘中读入内存。
t... -
Linux系统中的xlsfonts命令,看起来就像一堆乱码一样。但是xlsfonts可不是简单的Linux命令,它也有着很强大的功能。本文就给大家带来Linux系统xlsfonts命令的参数解析。
功能说明:列出XServer使用的字体。
语法:xlsfonts[-1Clmou][-display《主机名称或IP地址》:《显示器编号》][-fn《范本样式》][...