[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 編程技術 > 其它 > 正文
signal的全集和信號handler
http://www.linpus.com.tw (2001-06-29 14:08:00)

#define SIGHUP   1
進程由於控制終端死去或者控制終端發出起命令
#define SIGINT   2
鍵盤中斷所產生的信號

#define SIGQUIT   3
鍵盤終止

#define SIGILL   4
非法的指令

#define SIGTRAP   5
進程遇到一個追蹤(trace)或者是一個中斷嵌套

#define SIGABRT   6
由abort系統調用所產生的中斷信號

#define SIGIOT   6
類似於SIGABRT

#define SIGBUS   7
進程試圖使用不合理的記憶體

#define SIGFPE   8
浮點異常

#define SIGKILL   9
KILL

#define SIGUSR1  10
用戶自定義

#define SIGSEGV  11
段錯誤

#define SIGUSR2  12
用戶自定義

#define SIGPIPE  13
管道操作時沒有讀只寫

#define SIGALRM  14
由alarm系統調用產生的timer時鐘信號

#define SIGTERM  15
收到終端信號的進程

#define SIGSTKFLT 16
堆疊錯誤

#define SIGCHLD  17
子進程向父進程發出的子進程已經stop或者終止的信號

#define SIGCONT  18
繼續運行的信號

#define SIGSTOP  19
stop

#define SIGTSTP  20
鍵盤所產生的stop信號

#define SIGTTIN  21
當運行在後狀態時卻需要讀取stdin的資料

#define SIGTTOU  22
當運行在後狀態時卻需要寫向stdout

#define SIGURG  23
socket的緊急情況

#define SIGXCPU  24
進程超額使用CPU分配的時間

#define SIGXFSZ  25
進程使用了超出系統規定文件長度的文件

#define SIGVTALRM 26
內部的alarm時鐘過期

#define SIGPROF  27
在一個程式段中描繪時鐘集過期

#define SIGWINCH 28
終端視窗的改變

#define SIGIO  29
非同步IO

#define SIGPOLL  SIGIO
pollable事件發生


如何去冊一個信號handler?

  首先,用sigprocmask設置或者更改信號mask,如果信號mask沒有被設置,所有的信號採用預設的
方式處理,一旦設置了mask,就使用sigaction俘獲信號

int sigprocmask(int how,const sigset_t,sigset_t *oldset);
how有以下值:
SIG_BLOCK 集合中包含額外的信號需要阻塞
SIG_UNBLOCK 集合中包含額外的信號需要不阻塞
SIG_SETMASK 集合中包含新的信號mask

struct sigaction{
 void (*sa_handler)(int);
 sigset_t sa_mask;
 int sa_flags;
 void (*sa_restorer)(void);
};

*sa_handler指向信號處理的函數,sa_handler的參數可以是SIG_DFL,

,啟動信號處理的預設值,如果是SIG_IN,將忽略信號.

信號處理的過程中,需要使用sa_mask定義一套需要遮罩的信號

sa_flags是改變sa_handler行為的mask,它可以是以下幾種:

(1)SA_NOCLDSTOP
忽略子進程發出的SIGSTOP,SIGTSTP,SIGTTIN,SIGTTAU

(2)SA_ONESHOT或者SA_RESETHAND
冊的定制的信號處理僅僅被執行一次,在它被執行後,信號的缺省操作將被還原

(3)SA_RESTART
使能可重起的系統調用

(4)SA_NOMASK或者SA_NODEFER

dont prevent the signal from being recieved within its own handler
忽略sa_restorer,它無需使用



(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
signal的全集和信號handler (2001-06-29 14:08:00)
Linux程式設計- 3.signals (2001-05-24 16:47:48)
Linux程式設計- 2.fork, pthread, and signals (2001-05-24 15:00:00)
 

★  樊強制作 歡迎分享  ★