unix编程(五)信号

来源:互联网 发布:iphone倒计时软件 编辑:程序博客网 时间:2024/05/22 18:06

信号,用于通知进程发生了什么。


函数signal

处理信号的函数,可以选择SIG_DEF,默认 SIG_IGN忽略此信号


子进程终止

如果子进程终止,父进程不处理会导致子进程关闭的信号SIGCLD成为一个僵尸进程。但是如果选择SIG_IGN忽略这个信号就不会。


kill函数

只是给进程发送信号而已,不要从字面意思以为是kill进程


raise函数

给本进程发信号


alarm函数

到时间给进程发送SIGALARM信号


pause函数

进程挂起直到捕捉到一个信号


信号集

表示多个信号成为信号集

可以使用如下函数:

sigemptyset 清空

sigfillset 将所有信号加入信号集

sigaddset 加入一个信号到信号集

sigdelset 删除一个信号到信号集

sigismember 判断一个信号是否属于这个信号集


函数sigprocmask

屏蔽指定信号集,返回之前屏蔽的信号集。当屏蔽这个信号期间,如果这期间有这个信号过来,就会一直等待,直到这个信号不被屏蔽,会将这个信号触发一次。

int sigprocmask(int how, conset sigset_t *restrict set, sigset_t *restrict oset);

how:

SIG_BLOCK  增加阻塞

SIG_UNBLOCK 删除阻塞

SIG_SETMASK 信号屏蔽是set指向的值

set:

当前要设定的信号集

oset:

之前屏蔽的信号集


函数sigpending

返回一信号集,这些信号就是被阻塞的


函数sigaction

就是改进的signal,可以返回之前的处理方式。

int sigpending(sigset_t *set),通过set返回。


函数sigsetjmp siglongjmp

这个函数和setjmp logjmp功能类似,都是跳转函数。

只是当有信号发生的时候,在处理信号时,对当前信号的屏蔽的,并且在处理信号函数返回时把屏蔽的信号恢复。如果在处理信号时使用longjmp跳转,会导致不会把当前屏蔽信号恢复,所以使用siglongjmp来恢复屏蔽信号。


函数sigsuspend

int sigsuspend(const sigset_t *sigmask)

这是一个原子操作, 进程挂起,直到捕捉一个信号并且处理完,sigmask是设置屏蔽的信号。信号处理完之后恢复之前的屏蔽信号


abort函数

将SIGABRT信号发送给调用进程,异常终止。

1 0
原创粉丝点击