學習linux下c編程的信號這一章,做一做筆記吧。
常用的4個發出信號的系統函數kill,raise,alarm,setitimer。
kill向指定的進程發送信號
raise向自己發送sig信號
alarm是定時器,等規定時間到了向自己發送SIGALRM信號。
setitimer,設置一段時間使得程序間隔執行。(具體沒用過,不說很瞭解)
信號操作
函數 | 解釋 |
---|---|
int sigemptyset(sigset_t *set) | 初始化信號set,將其設爲空 |
int sigfillset(sigset_t *set) | 初始化set,將其設爲所有信號的集合 |
int sigaddset(sigset_t *set,int signo) | 將signo加入set集合中 |
int sigdelset(sigset_t *set,int signo) | 將signo從set中刪除 |
int sigismember(sigset_t *set,int signo) | 查詢signo是否在set中 |
int sigprocmask(int how,const sigset_t *set,sigset_t *oset) | 將指定信號集合加入進程阻塞集合中,oset是保存原來的阻塞集合,一般爲null,how是函數操作方式,SIG_BLOCK:增加信號集合到當前隊列中;SIG_UNBLOCK:從當前阻塞集合中刪除一個信號集合;SIG_SETMASK:設置當前信號集合爲阻塞集合 |
int sigaction(int signo,const struct sigaction *act,struct sigaction *oact) | 重定義信號發送的動作,同上,act爲添加的動作,oact爲被替換保存的動作 |
int pause(void ) | 掛起當前進程直到信號發生 |
int sigsuspend(const sigset_t *sigmask) | 掛起進程,調用的時候用sigmask取代當前阻塞集合 |
struct sigaction{
void (*sa_handler)(int signo);
void (*sa_sigaction)(int siginfo_t *info,void *act);
sigset_t sa_mask;
int sa_flags;
void (*sa_restore)(void);
}
注:signo中信號查看man 7 signal
關於這個,這位博主講的比較詳細:http://www.cnblogs.com/huyc/archive/2011/10/20/2218352.html