国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

Linux的信號機制

2024-07-21 02:37:34
字體:
來源:轉載
供稿:網友

  信號是unix中所使用的進程通信的一種最古老的方法.系統使用它來同志一個或多個進程異步事件的發生.
  
  linux系統庫bits/signum.h對信號名作了定義:
  linux的大多數信號是提供給內核的,僅有少數幾種信號可以在信號間發送.
  
  .SIGHUP 當終止一個終端時,內核就把這種信號發送給該終端所控制的所有進程.
  .SIGINT 當一個用戶按下中斷鍵(ctrl+c)后,內核就向該終端用關聯的所有進程發送這個信號.
  .SIGQUIT 當用戶按下(ctrl+),內核就向該終端用關聯的所有進程發送這個信號.
  .SIGILL 當一個進程企圖執行一條非法指令時,內核就發送這個信號.
  .SIGFPE 當產生浮點錯誤時,內核就發送這個信號.
  .SIGKILL 這是一個非常非凡的信號,他可以從一個進程發送到另一個進程,使接收到該信號的進程終止.內核偶然也發送這種信號.
  .SIGALRM 當一個定時器到時的時候,內核就發送這個信號.
  .SIGSTOP 子進程結束信號.UNIX用它來實現系統調用exit(),wait();
  
  信號的處理
  unix的系統調用signal()用于接受一個指定的信號,并可以指定相應的處理方法.
  
  在linux系統庫signal.h中,它的說明如下:
  signal(int sig,sighandler_t handler);
  sig用于指定信號類型.handle是用于處理該信號的函數.
  handle還可以是:
  .SIG_IGN 忽略這個信號.
  .SIG_DFL 恢復對這個信號的默認處理.
  
  例如:
  #include
  #include
  #include
  
  main(){
  signal(SIGINT,SIG_IGN);
  PRintf("hello!n");
  sleep(10);
  printf("hellon");
  }
  上面的代碼忽略了SININT信號.
  
  又例如:
  #include
  #include
  #include
  
  int catch(int sig);
  
  main(){
  signal(SIGINT,catch);
  printf("hello!n");
  sleep(10);
  printf("hello!n");
  }
  
  int catch(int sig){
  printf("catch signaln");
  return 1;
  }
  當用戶按下ctrl+c時,進程被中斷,catch()被執行.中斷處理函數處理完畢后,轉回斷點執行下面的指令.
  
  當編寫自己的中斷處理函數時,注重下面兩點:
  1.信號不能打斷系統調用.
  2.信號不能打斷信號處理函數.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 郧西县| 长武县| 建平县| 铜鼓县| 仁布县| 浦东新区| 长海县| 开阳县| 开鲁县| 古丈县| 金堂县| 璧山县| 平原县| 马鞍山市| 扬州市| 苍山县| 黔东| 郸城县| 格尔木市| 盱眙县| 河间市| 方城县| 宜昌市| 栾川县| 墨脱县| 南和县| 平山县| 家居| 蒙城县| 河北省| 聂拉木县| 那坡县| 东明县| 滦平县| 百色市| 漳平市| 五常市| 南阳市| 蕉岭县| 崇明县| 抚顺县|