微软官方MSDN原版Win10系统下载

现在位置: 首页  > 系统教程  > Linux教程

Linux信号机制解析

时间:2024-04-27 00:00:22   

大家好,今天Win10系统之家小编给大家分享「Linux信号机制解析」的知识,如果能碰巧解决你现在面临的问题,记得收藏本站或分享给你的好友们哟~,现在开始吧!

答案解析网免费2022系列软件最新版本下载

  在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下一页 剩下全文

以上就是关于「Linux信号机制解析」的全部内容,本文讲解到这里啦,希望对大家有所帮助。如果你还想了解更多这方面的信息,记得收藏关注本站~

Win10系统之家文♂章!

相关文章

  • Linux信号机制解析

    Linux信号机制解析


      在Linux中信号也称为软中断,进程在收到信号之后在对信号进行处理,可以说就是一个中断的过程。本文就来为大家简单地解析一下Linux信号机制。
      1、安装信号处理函数
      在系统编程的层面上与信号的处理关系最直接相关的函数有两个,他们用来安装信号处理函数:
      sighandler_tsignal(intsignum,sighandler_thandler)...
  • Linux信号机制的简单介绍

    Linux信号机制的简单介绍


      什么是Linux信号机制,Linux信号机制要讲解起来没那么简单,本文只是给大家讲解下Linux信号机制的基础知识,让你对Linux信号机制有一些了解,一起来学习下吧。
      Linux进程基础一文中已经提到,Linux以进程为单位来执行程序。我们可以将计算机看作一个大楼,内核(kernel)是大楼的管理员,进程是大楼的房客。每个进程拥有一个独立的房间(属于进程的内存空间),而...
  • Linux系统命令解析

    Linux系统命令解析


      对于Linux系统,用户们一定对它那功能强大的命令印象深刻,不过有许多Linux用户对Linux系统中的各项命令并不太熟悉,下面就和小编一起来看看Linux系统的命令吧。
      Linux的命令分为内部命令和外部命令:
      内部命令在系统启动时就调入内存,是常驻内存的,所以执行效率高。
      外部命令是系统的软件功能,用户需要时才从硬盘中读入内存。
      t...
  • Linux系统xlsfonts命令的参数解析

    Linux系统xlsfonts命令的参数解析


      Linux系统中的xlsfonts命令,看起来就像一堆乱码一样。但是xlsfonts可不是简单的Linux命令,它也有着很强大的功能。本文就给大家带来Linux系统xlsfonts命令的参数解析。
      功能说明:列出XServer使用的字体。
      语法:xlsfonts[-1Clmou][-display《主机名称或IP地址》:《显示器编号》][-fn《范本样式》][...