国产探花免费观看_亚洲丰满少妇自慰呻吟_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.信號不能打斷信號處理函數.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 海原县| 施甸县| 即墨市| 台湾省| 建阳市| 当阳市| 霍城县| 江川县| 定州市| 寿光市| 荥阳市| 图们市| 庆云县| 东丰县| 玛纳斯县| 泸州市| 虹口区| 芦溪县| 偃师市| 广南县| 通化县| 秦安县| 南安市| 彰化县| 临沂市| 修武县| 南京市| 大港区| 宜兴市| 泸定县| 石城县| 盱眙县| 井陉县| 浦城县| 桓台县| 宁南县| 含山县| 鹤峰县| 色达县| 通渭县| 马边|