pause()与sigsuspend()的用法
一.pause函数:
功能:让进程暂停直到信号出现
#include<unistd.h>
intpause();
函数说明:pause()会令目前的进程暂停(进入睡眠状态),直至信号(signal)所中断。
返回值:只返回-1
例子:
#include<stdio.h>
#include<unistd.h>
void deal()
{
printf(“信号干扰!\n”);
}
void main()
{
printf(“进程执行!\n”);
signal(SIGINT,deal);
pause();
printf(“进程结束!\n”);
}
说明:
当程序运行时,pause会使当前的进程挂起(进入睡眠状态),直到我们向该进程发送SIGINT中断信号,进程才会被唤醒,并处理信号,处理完信号后pause函数才返回,并继续运行该程序。注:任何信号都可是pause唤醒。
| pause(让进程暂停直到信号出现) |
相关函数
| kill,signal,sleep |
表头文件
| #include<unistd.h> |
定义函数
| int pause(void); |
函数说明
| pause()会令目前的进程暂停(进入睡眠状态),直到被信号(signal)所中断。 |
返回值
| 只返回-1。 |
错误代码
| EINTR 有信号到达中断了此函数。 |
[cpp]
- #include <unistd.h>
- #include <stdio.h>
- #include <signal.h>
- void myfunc()
- {
- printf("myfunc\n");
- exit(0); //如果没有此句,程序在主函数中继续运行,输出never run
- }
- int main()
- {
- unsigned int i;
- int time;
- alarm(9);
- sleep(2);
- time = alarm(0); //闹钟取消,返回剩余时间,每次只能有一个闹钟生效
- printf("dd%d\n",time);
- alarm(2);
- signal(SIGALRM, myfunc); //catching signal,获得闹钟返回的信号SIGALRM,运行对应程序。
- pause(); //挂起进程,当获得信号后,调用signal函数,如果没有信号调用默认的catching函数一般就会退出进程
- printf("never run");
- return 0;
- }
二.sigsuspend函数:
#include<signal.h>
intsigsuspend(const sigset_t *sigmask);
返回值:-1
sigsuspend函数和pause函数一样,可以是进程挂起(进入睡眠状态),直至有信号发生。
sigsuspend函数的参数是一个信号集,这个信号集是用来屏蔽信号的,信号集中存放了要屏蔽的信号。
如果该信号集为空的话,sigsuspend就不屏蔽任何信号,任何信号都可以使进程从挂起状态唤醒,这就与pause函数一样了。