学习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