6.10.1 pause函数

pause函数在Linux中用于挂起进程,等待信号的到来。当接收到信号时,如果执行用户定义的信号处理函数,pause会在处理完后返回;若信号导致进程终止,pause则不返回。返回值通常是-1并设置errno为EINTR。为了避免错过特定信号,程序员需要在信号处理函数中设置标志位,然后在pause返回后检查。然而,由于检查和pause之间存在时间窗口,可能导致错失信号的问题。程序可能在关键操作后阻塞信号,然后暂停,等待信号到达。
摘要由CSDN通过智能技术生成

6.10.1 pause函数

pause函数将调用线程挂起,使进程进入可中断的睡眠状态,直到传递了一个信号为止。

这个信号的动作或者是执行用户定义的信号处理函数,或者是终止进程。

如果是执行用户自定义的信号处理函数,那么pause会在信号处理函数执行完毕后返回;

如果是终止进程,pause函数就不返回了。

如果内核发出的信号被忽略,那么进程就不会被唤醒。

pause函数的定义如下:

int pause (void);

比较有意思的是,pause函数如果可以返回,那它总是返回-1,并且errno为EINTR。

如果希望pause函数等待某个特定的信号,就必须确定哪个信号会让pause返回

事实上,pause并不能主动区分使pause返回的信号是不是正在等待的信号,我们必须间接地完成这个任务。

常用的方法是,在期待的特定信号的信号处理函数中,将某变量的值设置为1,待pause返回后,通过查看该变量的值是否为1来判定等待的特定信号是否被捕获,方法如下面的代码所示:

static volatile sig_atomic_t sig_received_flag = 0;
while(sig_received_flag == 0)
	pause();

如果只有等待的那个信号的处理函数会将sig_received_flag置成1,那么进程就会一直阻塞,直到接收

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值