函数pause

调用该函数可以造成进程主动挂起,等待信号唤醒,调用该系统调用的进程处于阻塞状态(主动放弃CPU)直到有信号递达将其唤醒。


  • 将进程置为可中断睡眠状态。然后 它调用schedule(),使linux进程调度器找到另一个进程来运行。
  • pause使调用者进程挂起,直到一个信号被捕捉。

pause() return only when a signal  was caught and signal-catching function returned, In this case pause() return -1, and errno is set to EINTR.

1. pause函数原型:

#include<unistd.h>
int pause(void);返回值:-1; errno设置为EINTR

返回值:

  • 如果信号的默认处理动作是终止进程,则进程终止,pause函数没有机会返回。
  • 如果信号的默认动作是忽略,进程继续处于挂起状态,pause函数不返回
  • 如果信号的处理动作是捕捉,则【调用完信号处理函数之后,pause返回-1】errno设置为EINTR,表示“被信号中断”
  • pause收到的信号不能屏蔽,如果被屏蔽,那么pause就不能被唤醒。

1. 测试代码

#include<stdio.h>
#include<stdlib.h>
#include<signal.h>
#include<errno.h>
#include<unistd.h>void catch_sigalrm(int signo)
{;
}unsigned int mysleep(unsigned int seconds)
{int ret;struct sigaction act, oldact;act.sa_handler = catch_sigalrm;sigemptyset(&act.sa_mask);act.sa_flags = 0;ret = sigaction(SIGALRM, &act, &oldact);if(ret == -1) {perror("sigaction error");exit(1);}alarm(seconds); ret = pause();  //主动挂起,等待信号if(ret == -1 && errno == EINTR) {printf("pause sucess\n");}ret = alarm(0); //防止异常产生sigaction(SIGALRM, &oldact, NULL);//恢复AIGALRM信号旧有的处理方式return ret;
}int main()
{while(1) {mysleep(3);printf("----------------------------\n");}return 0;
}

输出结果:

2. 测试代码:

#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>void handler(int sig);int main(int argc, char *argv[]){if(signal(SIGINT, handler) == SIG_ERR) {perror("signal error");exit(1);}for(; ;) {pause();printf("pause return\n");}     return 0;}void handler(int sig){printf("recv a sig = %d\n", sig);}

输出结果:

信号 09 | 函数pause相关推荐

  1. Linux信号编程实践(二) 信号发送函数和可重入函数

    在早期的UNIX中信号是不可靠的,不可靠在这里指的是:信号可能丢失,一个信号发生了,但进程却可能一直不知道这一点. 现在Linux 在SIGRTMIN实时信号之前的都叫不可靠信号,这里的不可靠主要是不 ...

  2. linux系统发送信号的系统调用是,linux系统编程之信号:信号发送函数sigqueue和信号安装函数sigaction...

    信号发送函数sigqueue和信号安装函数sigaction sigaction函数用于改变进程接收到特定信号后的行为. sigqueue()是比较新的发送信号系统调用,主要是针对实时信号提出的(当然 ...

  3. 【信号】函数kill、raise、abort、alarm

    一.函数kill 1. kill函数原型: int kill(pid_t pid, int signo); //signo:信号名 分析: pid  > 0: 发送信号给指定的进程 pid = ...

  4. 信号发送函数sigqueue和信号安装函数sigaction

    一,sigaction() #include <signal.h>  int sigaction(int signum,const struct sigaction *act,struct ...

  5. 第六章_信号 : signal函数--信号

    signal函数–信号 常见的信号类型 signal信号机制是属于计算机异常处理机制中的一种. signal信号属于一种异步处理异常的机制之一. 类似于我们平常在命令行上对于死循环的程序,按下ctrl ...

  6. linux exec 二程序,二十五、Linux 进程与信号---exec函数

    25.1 介绍 在用 fork 函数创建子进程后,子进程往往要调用一种 exec 函数以执行另一个程序 当进程调用一种 exec 函数时,该进程完全由新程序代换,替换原有进程的正文,而新程序则从其 m ...

  7. 信号之函数的可重入性

    信号之函数的可重入性 在调用某个函数过程中出现中断信号,且改信号处理函数中再次调用该函数,访问全局.静态变量的函数是不可重入函数. 前后数据不一致,函数是不可重入的,特点:函数中使用全局变量或静态变量 ...

  8. linux操作系统信号捕捉函数之回调函数小结

    (1)signal 信号捕捉函数:注册一个信号捕捉函数(不参与捕捉,那是内核的事情) 函数实现: typedef   void(*sighandler_t)(int);   //声明了一个函数指针(代 ...

  9. linux操作系统信号捕捉函数之sigaction用法小结

    (1)sigaction函数:注册一个信号捕捉函数(不参与捕捉信号,信号由内核捕捉),并修改原来的信号处理动作 (2)函数原型及头文件 头文件:#include<signal.h> 函数原 ...

最新文章

  1. Chapter 8(查找)
  2. 打造全球最大规模 Kafka 集群,Uber 的多区域灾备实践
  3. 搞定了数学,拿下了代码,没想到在这件事上栽了跟头……
  4. python图形用户界面设计报告_19.1 Python图形用户界面开发工具包
  5. 多目标优化算法(二)MOEAD及MOEAD与NSGA-Ⅱ的对比
  6. 全新版个人博客小程序,无需开发服务端接口即可使用
  7. MyGameDemo:打砖块
  8. 大数据_Flink_数据处理_命令行提交Job---Flink工作笔记0014
  9. 路径规划算法学习Day4-Astar算法
  10. 【Git】git命令git clone 报错的解决方法集合
  11. cmd命令行怎样运行python,在CMD命令行中运行python脚本的方法
  12. fiddler 抓包显示 ERR_TUNNEL_CONNECTION_FAILED
  13. 2021/1/26-每日三题第33弹:皮皮虾,我们走 !你知道什么是面向对象编程和面向过程编程吗 ???
  14. android ios 屏幕直播软件推荐,看个球:超全超给力的看球直播利器(iOS +安卓) | 闲一鱼博客...
  15. 试算平衡表示例图_期末试算平衡表截图
  16. 老板用个人手机可以远程监控员工的电脑吗?
  17. 安卓内部存储之数据库存储
  18. JAVASE点餐系统源码
  19. Java第十章复习 I/O输入输出
  20. 年轻不妥协 纽曼K1四核官方报价1099元

热门文章

  1. class threading.Thread()说明:
  2. 大话设计模式之设计模式遵循的七大原则
  3. (转)利用MS AJAX 扩展服务器端控件
  4. d9900 修改ip 思科dcm_思科设备SSH登陆详细配置过程
  5. mysql 查看锁表日志_MYSQL 表锁情况查看
  6. 光耀卡服务器维修,3月28日服务器更新维护公告
  7. 地铁闸门会夹伤人吗_家长们注意啦!又有孩子被地铁闸机夹翻
  8. jq查找字段忽略html标签,jQuery过滤HTML标签并高亮显示关键字的方法
  9. 后台系统可扩展性学习笔记(十一)Database Denormalization
  10. python数据库连接池使用