linux系统编程:暂停函数pause

news2024/9/27 12:12:46

pause函数

该函数功能主要是暂停进程,它的返回值总是-1

使用方式:

(1)首先使用signal函数提前注册一个中断函数,该函数用于将函数指针和信号做一个绑定;
(2)当程序进行执行pause,该进程暂停,等待处理信号,当任何信号到来时,程序将继续执行,不理会signal函数的响应。如果和signal中注册的信号相同,将会执行siganl中注册的函数,再继续执行后续代码;如果不同,将不会执行绑定的操作,直接退出。

以下是进程等待的信号表示:

信号表示快捷键该信号的意义
SIGINTCtrl+C进程中断
SIGTSTPCtrl+Z终端的停止信号

注意:

  • 使用fork创建子进程之后,父子进程都可以接受到信号;
    /*  In alarm.c, the first function, ding, simulates an alarm clock.  */
    
    #include <signal.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    
    static int alarm_fired = 0;
    
    void ding(int sig)
    {
        alarm_fired = 1;
    }
    
    /*  In main, we tell the child process to wait for five seconds
        before sending a SIGALRM signal to its parent.  */
    
    int main()
    {
        pid_t pid;
    
        printf("alarm application starting\n");
    
        pid = fork();
        switch(pid) {
        case -1:
          /* Failure */
          perror("fork failed");
          exit(1);
        case 0:
          /* child */
            sleep(5);
            kill(getppid(), SIGALRM);
            exit(0);
        }
    
    /*  The parent process arranges to catch SIGALRM with a call to signal
        and then waits for the inevitable.  */
        printf("waiting for alarm to go off\n");
        (void) signal(SIGALRM, ding);
    
      pause();
    //
        if (alarm_fired)
            printf("Ding!\n");
    
        printf("done\n");
        exit(0);
    }

    父进程通过pid=fork()创建子进程后,子进程在休息5秒后向父进程发送ALARM信号。
    此时父进程因为调用pause( )函数而被阻塞;
    但是如果在5秒时间内父进程收到任何其他的信号,父进程将不会执行 (void) signal(SIGALRM, ding);语句,而是继续执行剩下的语句;
    运行示例如下:在子进程向父进程发送ALARM信号时间内,通过终端向父进程发送Ctrl+C信号,此时父进程来不及接收子进程发送的ALARM,此时父进程的pause函数恢复执行。

  •  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/129644.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Bp2Lua】深入理解蓝图

【Bp2Lua】深入理解蓝图 做 Bp2Lua 过程中的副产物&#xff0c;蓝图在连连看背后隐含的操作 有几点想说明的 蓝图会隐含一些操作&#xff0c;前端节点图是看不出来的&#xff0c;但是后端字节码会一览无余Bp2Lua 本质是 字节码 ToLua&#xff0c;其实 Bp2Lua 根本不关心也不…

策略模式(strategy pattern)

背景 一、一个具体实现范例的逐步重构 补血道具(药品)&#xff1a;a) 补血丹&#xff1a;补充200点生命值&#xff1b;b) 大还丹&#xff1a;补充300点生命值&#xff1b;c) 守护丹&#xff1a;补充500点生命值将Fighter,F_Warrior,F_Mage 单独写在一个文件中。 Fighter.h …

一步一步学爬虫(4)数据存储之文本存储

一步一步学爬虫&#xff08;4&#xff09;数据存储之文本存储4.1 TXT纯文本文件存储4.1.1 本节目标4.1.2 基本实例4.1.3 打开方式4.1.4 简化写法4.1 TXT纯文本文件存储 将数据保存到 TXT 文本的操作非常简单&#xff0c;而且 TXT 文本几乎兼容任何平台&#xff0c;但是这有个缺…

Spark环境搭建(Hadoop YARN模式)

前言 按照前面环境部署中所学习的&#xff0c;如果我们想要一个稳定的生产Spark环境&#xff0c;那么最优的选择就是构建&#xff1a;HA StandAlone集 群。 不过在企业中&#xff0c; 服务器的资源总是紧张的&#xff0c;许多企业不管做什么业务&#xff0c;都基本上会有Hadoo…

AD软件绘制不规则焊盘的器件封装

网上有很多关于AD软件绘制不规则焊盘的帖子&#xff0c;搜了一些帖子看了一下&#xff0c;感觉不太对。严格意义上AD软件是不能绘制不规则的焊盘的&#xff0c;至少目前用的AD软件不支持。为什么这么说呢&#xff1f; 我提一个需求&#xff1a;假如我在PCB文件中需要随意的添加…

企业选择SOP作业指导书系统的目的和意义

SOP是将作业指导流程予以说明规范&#xff0c;让作业人员有一个标准的作业准则&#xff0c;以达到作业的标准一致性。也是一种管理模式&#xff0c;通过对过程的标准化操作&#xff0c;减少和预防差错和不良后果的发生。通过动作的解析、比较、分析&#xff0c;循环作业分析等输…

MIT6.830-2022-lab4实验思路详细讲解

目录前言一、实验概览Exercise 1:Granting LocksExercise 2:Lock LifetimeExercise 3:Implementing NO STEALExercise 4:TransactionsExercise 5&#xff1a;Deadlocks and Aborts总结 && Debug记录前言 到lab4事务&#xff0c;这一块应该是数据库中概念比较多&#x…

2022/12/30总结

今日学习了二叉树有关知识。 二叉树 二叉树通俗来讲就是一个有俩个指针的链表。他们大多长这个样子&#xff1a; 这里还有俩个概念了&#xff0c;二叉树分为完全二叉树和满二叉树 上面所说的是满二叉树&#xff0c;顾名思义就是每个父节点都相应的有俩个指针&#xff0c;通常…

基于springboot+Vue的宿舍管理系统前后端分离(程序+详细文档+数据库)

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…

前端devops——利用gitlab实现CI/CD自动化部署

目录 前言 一、前期准备 1、开启虚拟服务 2、下载并安装docker 二、开始部署 1、安装gitlab 2、修改默认账号登录密码 3、修改项目clone地址 三、Gitlab CI/CD 1、安装并运行gitlab-runner 2、执行runner 3、将项目注册到gitlab-runner 1、获取token 2、执行注册 …

ETL数据清洗

大多数据仓库的数据架构可以概括为&#xff1a; 数据源-->ODS(操作型数据存储)-->DW-->DM(data mart) ETL贯穿其各个环节。 ​一、数据抽取&#xff1a; 可以理解为是把源数据的数据抽取到ODS或者DW中。 1. 源数据类型&#xff1a; 关系型数据库&#xff0c;如Or…

多模态串讲(上)

多模态的学习在最近几年异常火爆&#xff0c;除了普通的多模态学习&#xff0c;比如视觉问答&#xff0c;图文检索等,其实之前讲的所有这种Language Guided Detection&#xff0c;或者Language Guided Segmentation&#xff0c;这些任务都是多模态的&#xff0c;还有最近火的文…

SpringCloud之负载均衡Ribbon

1.Ribbon是什么&#xff1f; •Ribbon是 Netflix 提供的一个基于HTTP和TCP的客户端负载均衡工具。 •Ribbon主要有两个功能&#xff1a; 1.简化远程调用 2.提供客户端的软件负载均衡算法 Ribbon客户端组件提供一系列完善的配置项&#xff0c;如连接超时&#xff0c;重试等…

ERA5数据不同下载方法

ERA5数据不同下载方法1 ERA5简介2 ERA5下载的三种方法2.1 方法1&#xff1a;GEE下载2.2 方法2&#xff1a;官方网站下载2.3 方法3&#xff1a;通过Python脚本下载&#xff08;以Linux系统为例&#xff09;总结参考1 ERA5简介 ERA5是ECMWF对全球气候的第五代大气再分析。再分析…

ArcGIS基础实验操作100例--实验17按条件计算属性字段值

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验17 按条件计算属性字段值 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff0…

工业远程I/O模块CANopen I/O模块 安装接线说明

1&#xff09;外观尺寸 DIN35mm Rail标准导轨支架外观与尺寸&#xff1a; 2&#xff09;面板说明 指示灯说明运行指示灯 绿色预留预留错误指示灯 红色CANopen地址设置开关&#xff0c;CANopen 通讯速率设置开关&#xff0c;当 0表示通信速率为10Kbps 4表示通信速率为250Kbps 1表…

Linux | 内存 | 由内存页不足(page allocation failure)引起程序杀死(OOM Killer)

本文对由于 page allocation failure 而引起 Out of Memory Killer 的背景及工作原理进行不完全总结。 更新&#xff1a;2022 / 12 / 30 文章目录触发条件__alloc_pages_slowpath()__vmalloc_area_node()__vmalloc_node_range工作原理结合实例1.2.GFP_ATOMIC 和 __GFP_COMP&am…

阿里云弹性预测 AHPA:助力厨芯科技降本增效

作者&#xff1a;李鹏&#xff08;元毅&#xff09; “使用阿里云弹性预测 AHPA&#xff0c;降低了 K8s 容器成本&#xff0c;同时减轻了运维工作量&#xff0c;加速了业务容器化的进程。”—— 朱晏(厨芯科技VP) 背景 厨芯科技&#xff0c;是全球领先的餐饮设备和服务提供商…

TCP 的报头结构 和 三次握手---详解(看完必会)

TCP 的三次握手&#xff1a; 在搞懂三次握手前&#xff0c;必须要搞明白TCP报头的结构内容 TCP报头结构&#xff1a; 源端口号 : 源计算机上的应用程序的端口号&#xff1b;目的端口号 : 目标计算机的应用程序端口号&#xff1b;序列号&#xff1a;客户端给服务端发送数据时…

React 配置文件(二) 配置环境变量

开发环境一般分为: UAT(测试环境) PRE(预上线环境) PROD(生产环境) 所以本地开发分别搭建相对应环境 2.安装 dotenv 3.在package.json文件中配置环境 "scripts": { "start": "react-app-rewired start", "uat": "dotenv…