信号
1:信号分为可靠信号和不可靠信号两种.
不可靠信号是小于32的信号,也称标准信号.它的不可靠表示程序有可能对信号采取了错误处理和信号丢失.在unix中,在信号程序处理完不可靠信号后,系统会自动把信号处理改为默认,所以我们处理不可靠信号的时候每次都要重设信号处理.但是linux系统已经改进,可以不用重设不可靠信号处理了.
可靠信号是大于等于32小于64的信号.也称为实时信号.
2:产生信号函数:
kill(),raise(),alarm(),sigqueue(),setitimer(),abort().
3:捕捉信号函数
signal(),sigaction().
4:阻塞信号函数
sigemptyset(sigset_t *set)初始化由set指定的信号集,信号集里面的所有信号被清空;
sigfillset(sigset_t *set)调用该函数后,set指向的信号集中将包含linux支持的64种信号;
sigaddset(sigset_t *set, int signum)在set指向的信号集中加入signum信号;
sigdelset(sigset_t *set, int signum)在set指向的信号集中删除signum信号;
sigismember(const sigset_t *set, int signum)判定信号signum是否在set指向的信号集中。
sigprocmask(int how, const sigset_t *set, sigset_t *oldset));用来设置阻塞信号的
sigpending(sigset_t *set));获得当前的阻塞信号
sigsuspend(const sigset_t *mask));程序挂起,等待信号
5:信号注意点:
1)alarm(int)函数,一个进程只能维护一个时钟函数.这个函数是在规定的时间完成后给程序发送SIGALRM信号,信号的默认处理是终结进程.如果一个进程中有两个或者两个以上时钟的话,那么后一个设置的时钟返回值是前一个时钟的剩余时间.
2)sigprocmask()函数能够根据参数how来实现对信号集的操作,主要有三种:
SIG_BLOCK 把当前的set中指定的信号集阻塞起来.
SIG_UNBLOCK 接触当前的set中指定的信号集的阻塞.
SIG_SETMASK 更新进程阻塞信号集为set指向的信号集.
同时在阻塞的过程中,如果是不可靠信号,则一个信号不管发生多少回,只记录第一次的.如果是可靠信号则全部放进信号队列.
3)信号处理虽然不会被同种信号打断,但是可以被别的信号打断.
阅读(481) | 评论(0) | 转发(0) |