pause()与sigsuspend()的用法

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]

  1. #include <unistd.h>
  2. #include <stdio.h>
  3. #include <signal.h>
  4. void myfunc()
  5. {
  6. printf("myfunc\n");
  7. exit(0);         //如果没有此句,程序在主函数中继续运行,输出never run
  8. }
  9. int main()
  10. {
  11. unsigned int i;
  12. int time;
  13. alarm(9);
  14. sleep(2);
  15. time = alarm(0);            //闹钟取消,返回剩余时间,每次只能有一个闹钟生效
  16. printf("dd%d\n",time);
  17. alarm(2);
  18. signal(SIGALRM, myfunc);    //catching signal,获得闹钟返回的信号SIGALRM,运行对应程序。
  19. pause();                    //挂起进程,当获得信号后,调用signal函数,如果没有信号调用默认的catching函数一般就会退出进程
  20. printf("never run");
  21. return 0;
  22. }  

二.sigsuspend函数:

   #include<signal.h>

intsigsuspend(const sigset_t *sigmask);

返回值:-1

sigsuspend函数和pause函数一样,可以是进程挂起(进入睡眠状态),直至有信号发生。

sigsuspend函数的参数是一个信号集,这个信号集是用来屏蔽信号的,信号集中存放了要屏蔽的信号。

如果该信号集为空的话,sigsuspend就不屏蔽任何信号,任何信号都可以使进程从挂起状态唤醒,这就与pause函数一样了。