linux系统编程:暂停函数pause
pause函数
该函数功能主要是暂停进程,它的返回值总是-1
。
使用方式:
(1)首先使用signal函数提前注册一个中断函数,该函数用于将函数指针和信号做一个绑定;
(2)当程序进行执行pause,该进程暂停,等待处理信号,当任何信号到来时,程序将继续执行,不理会signal函数的响应。如果和signal中注册的信号相同,将会执行siganl中注册的函数,再继续执行后续代码;如果不同,将不会执行绑定的操作,直接退出。
以下是进程等待的信号表示:
信号表示 | 快捷键 | 该信号的意义 |
---|---|---|
SIGINT
|
Ctrl+C | 进程中断 |
SIGTSTP
|
Ctrl+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 secondsbefore 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 signaland 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函数恢复执行。
linux系统编程:暂停函数pause相关推荐
- Linux系统编程——alarm函数
alarm函数 函数原型:unsigned int alarm(unsigned int seconds); 函数描述:设置定时器(闹钟).在指定seconds后,内核会给当前进程发送14)SIGAL ...
- Linux系统编程------mmap函数
mmap void *mmap(void* addr, size_t length, int prot, int flags, int fd, off_t offset) // 创建共享内存映射 参数 ...
- linux系统发送信号的系统调用是,linux系统编程之信号:信号发送函数sigqueue和信号安装函数sigaction...
信号发送函数sigqueue和信号安装函数sigaction sigaction函数用于改变进程接收到特定信号后的行为. sigqueue()是比较新的发送信号系统调用,主要是针对实时信号提出的(当然 ...
- linux系统编程学习_(2)进程控制-- fork函数、exec函数族、回收子进程--孤儿进程僵尸进程、wait函数
linux系统编程学习_(2)进程控制-- fork函数.exec函数族.回收子进程–孤儿进程僵尸进程.wait函数 进程控制 fork()函数 创建一个子进程. pid_t fork(void); ...
- 【Linux】一步一步学Linux系统编程教程汇总(暂时暂停更新......)
00. 目录 文章目录 00. 目录 01. 概述和标准 02. 文件操作 03. 进程概念 04. 进程间通信 05. 多线程 06. 信号 07. 同步与互斥 08. 高级IO 09. 其它 10 ...
- 【Linux系统编程】vfork() 函数详解
00. 目录 文章目录 00. 目录 01. vfork函数 02. fork和vfork区别 03. 父子进程地址空间 04. 附录 01. vfork函数 函数分析 #include <sy ...
- 【Linux系统编程】fork()函数详解
00. 目录 文章目录 00. 目录 01. 进程创建函数 02. 父子进程结构 03. 父子进程地址空间 04. 附录 01. 进程创建函数 #include <sys/types.h> ...
- linux系统编程之文件与I/O(六):fcntl 函数与文件锁
2013-05-14 11:26 8290人阅读 评论(2) 收藏 举报 分类: linux系统编程(19) 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.fcntl函数 功能:操纵文 ...
- Linux系统编程1——系统函数
文章目录 前言 一.C标准函数与系统函数的区别 1.什么是系统调用 2.文件描述符 3.相关函数 3.1 open函数 3.2 close函数 3.3 read函数 3.4 write函数 3.5 l ...
- Linux系统编程 37 -makefile2个函数和clean
Linux系统编程 37 -makefile2个函数和clean 学习笔记 一个makefile 就是用一个个规则凑在一起 2个函数 wildcard patsubst wildcard 百搭牌,通配 ...
最新文章
- Windows Terminal 1.0 正式发布
- python实现redis分布式锁
- 《 Spring 实战 》(第4版) 读书笔记 (未完结,更新中...)
- 智能指针分配动态数组
- Pentaho Data Integration - Kettle 入门指南
- Stata和Matlab联合处理金融数据
- spark中local模式与cluster模式使用场景_Spark内核及通信框架概述-针对面试(后面有源码分析)...
- Tornado异步IO
- 大话RabbitMQ 基础入门
- Eclipse的工作空间与项目
- Linux 内核C -- 第02课:驱动中的指定初始化
- activex与matlab,在MATLAB图形用户界面设计中使用ActiveX控件
- 英语词根与说文解字词典读书笔记,并总结输出思维导图
- 配置authorized_keys让服务器A免密登录服务器B
- 项目反应理论 EM估计
- 聊聊这个本不存在的 “元宇宙”
- 使用python获取win10锁屏照片
- Linux进程间关系之终端与终端登录
- 计算机考英语一数学二,这所院校初试科目调整为数一英一!又有专业计划停招!这些信息21考研人一定要知道!...
- 购房,出资款性质如何认定?