六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

Linux信號機制解析

[摘要]在Linux中信號也稱為軟中斷,進程在收到信號之后在對信號進行處理,可以說就是一個中斷的過程。本文就來為大家簡單地解析一下Linux信號機制。1、安裝信號處理函數在系統編程的層面上與信號的處理關系最...

  在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是一套免費使用和自由傳播的類Unix操作系統




主站蜘蛛池模板: 亚洲国产精品成人午夜在线观看 | 伊人久久免费 | 日本大学生免费一级一片 | 亚洲成在人天堂在线 | 伊人福利视频 | 亚欧有色 | 天堂资源8中文最新版在线 天堂中文字幕在线 | 五月婷婷深爱 | 欧美在线一区二区 | 四虎在线永久免费视频网站 | 一级久久 | 人人揉揉香蕉 | 四虎影院永久在线 | 中文精品视频一区二区在线观看 | 天堂中文在线资源 | 亚洲最新中文字幕 | 又爽又黄又无遮挡的视频在线观看 | 欧美在线日韩在线 | 热热影院| 青青草国产免费久久久91 | 五月天伊人网 | 丝袜美女爽爆91 | 特黄女一级毛片 | 五月综合激情视频在线观看 | 日韩黄色影院 | 全部免费毛片免费播放 | 四虎在线永久免费视频网站 | 午夜性福利视频 | 欧美一级中文字幕 | 自拍视频免费 | 亚洲福利视频一区二区三区 | 青青青国产在线 | 日本色资源 | 亚洲免费网站 | 日本三级视频 | 色四月婷婷 | 亚洲天堂婷婷 | 中文字幕波多野结衣免费视频 | 日本性网址 | 青青青国产在线 | 日韩欧美中文在线 |