魔法系统之家下载 - 系统之家,XP系统之家,GhostXP系统,纯净版XP系统,Windows7下载之家

当前位置:首页 > 系统教程 > Linux教程 > 详细页面

Linux信号机制解析

时间:2017-08-17 19:56:05来源:魔法系统之家下载作者:zhijie

  在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 }

上一页12 
分享到:

相关信息

  • Arch Linux不适合当作服务器操作系统的四大原因

    为什么Arch Linux不适合当作服务器操作系统?可能很多用户都发现了,Linux服务器操作系统一般都是Ubuntu Server、Cent OS、Fedora或者Red Hat等,为什么很少看到Arch Linux呢?因为Arch Linux在服务方面确实存在一些劣势,下面...

    2017-08-17

  • Ubuntu 3D桌面特效怎么设置?

    有些用户为了使桌面更好看、更具动感性,于是就想要设置系统的3D桌面特效,不过不少人却不知道Ubuntu 3D桌面特效怎么设置?其实方法很简单,如果你不知道的话,那就赶紧来看看小编整理的Ubuntu 3D桌面特效设置方法吧!...

    2017-08-17

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载