当前位置: 首页 > news >正文

【Linux】多进程基础--信号

文章目录

    • 信号
      • 常见信号
      • 信号定时函数

信号

  • 发生事件时通过信号向进程进行通知,在软件层次上模拟中断,也叫软件中断,处理优先级较高
  • 对于前台进程可以通过特殊的字符发送信号,例如Ctrl+C即给当前进程发送一个SIGINT中断信号。
  • kill命令也是向进程发送信号,可以通过kill -l查询信号,例如kill -9 pid即向pid进程发送终止信号
  • 信号通信较为简单、不能携带大量的信息、优先级较高
  • 信号的默认处理动作为:Term终止进程、lgn忽略信号、Core终止进程并生成Core文件默认大小为0,可以通过ulimit -a查看,并通过ulimit -c unlimited进行大小修改即可看到相应文件,一般和gdb配合使用在gdb中可以通过core-file core查看文件、Stop暂定进程、Cont继续执行被暂停的进程,man 7 signal可查询详细信息

常见信号

信号代号信号名称说 明默认动作
1SIGHUP该信号让进程立即关闭,然后重新读取配置文件之后重启终止进程
2SIGINT程序中止信号,用于中止前台进程。相当于输出 Ctrl+C 快捷键终止进程
3SIGQUIT和SIGINT类似, 但由QUIT字符(通常是Ctrl+/)来控制。 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。终止进程
8SIGFPE在发生致命的算术运算错误时发出。不仅包括浮点运算错误,还包括溢出及除数为 0 等其他所有的算术运算错误终止进程、产生core文件
9SIGKILL用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。般用于强制中止进程终止进程–强制
11SIGSEGV试图访问未分配给自己的内存, 或试图往没有写权限的内存地址写数据,段错误终止进程产生core文件
13SIGPIPE管道破裂。这个信号通常在进程间通信产生,比如采用FIFO(管道)通信的两个进程,读管道没打开或者意外终止就往管道写,写进程会收到SIGPIPE信号。终止进程
14SIGALRM时钟定时信号,计算的是实际的时间或时钟时间。alarm 函数使用该信号终止进程
15SIGTERM正常结束进程的信号,kill 命令的默认信号。如果进程已经发生了问题,那么这个信号是无法正常中止进程的,这时我们才会尝试 SIGKILL 信号,也就是信号 9终止进程
17SIGCHLD子进程结束时, 父进程会收到这个信号。忽略信号
18SIGCONT该信号可以让暂停的进程恢复执行。本信号不能被阻断继续/忽略
19SIGSTOP该信号可以暂停前台进程,相当于输入 Ctrl+Z 快捷键。本信号不能被阻断终止进程

信号定时函数

unsigned int alarm(unsigned int seconds);
//alarm不阻塞,程序正常执行,在指定的时间后向进程发送一个信号,通常是SIGALRM信号。
//参数seconds:指定多少秒后发送SIGALRM信号给调用进程。如果seconds为0,则取消任何现有的闹钟(如果有的话)。
//返回值:如果之前已有闹钟设置,该函数返回剩余的秒数并从新设置的秒数计时,如果没有设置过闹钟,返回0。
//SIGALRM:默认终止当前进程int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);
//成功时返回0,出错时返回-1,并设置errno
//周期性定时可代替alarm
//which:指定要设置的计时器类型,一般为ITIMER_REAL真实时间返回SIGALRM
//value:指向一个itimerval结构的指针
struct itimerval {struct timeval it_interval; /* 下一次间隔 */struct timeval it_value;   /* 多长时间开始计时 */
};
struct timeval{time_t tv_sec;//秒数suseconds_t tv_usec;//微秒
}
ovalue(可选):指向一个itimerval结构的指针,用来存储之前设置的定时器值。如果不需要旧值,可以传入NULL。struct itimerval new_value;
//设置间隔
new_value.it_interval.tv_sec=2;
new_value.it_interval.tv_usec=0;//设置延迟
new_value.it_value.tv_sec=3;
new_value.it_value.tv_usec=0;//使用if (setitimer(ITIMER_REAL, &new_value, NULL) == -1) {perror("setitimer error");return 1;}
http://www.lryc.cn/news/362276.html

相关文章:

  • 若依项目部署(Linux2.0)
  • python小练习03
  • 【机器学习】机器学习在深度学习领域中的作用:半监督学习的视角
  • C#WPF数字大屏项目实战01--开发环境与项目创建
  • python中字符串的各类方法
  • DataGrip 数据库连接客户端
  • JS片段:生成 UUID
  • 小学数学出题器-Word插件-大珩助手
  • 短剧平台源码:打造个性化娱乐体验的核心功能
  • 【MySQL】MySQL 图形化界面 - 使用说明(MySQL Workbench)
  • Shell 编程之免交互
  • github有趣项目:Verilog在线仿真( DigitalJS+edaplayground)
  • 性能测试学习-基本使用-元件组件介绍(二)
  • 基于大模型的智慧零售教育科研平台——技术方案
  • C# using的几个用途
  • MyBatis3.4全集笔记
  • IDEA一键启动多个微服务
  • 【Python3】random.choices 权重随机选取 详解
  • 【面试题-015】Redis的线程模型是什么 为什么速度快
  • EasyV开发人员的使用说明书
  • 构造列表初始化和构造初始化区别
  • Message passing mechanism (消息传递机制)
  • 详解 Spark SQL 代码开发之数据读取和保存
  • Pulsar 社区周报 | No.2024-05-30 | BIGO 百页小册《Apache Pulsar 调优指南》
  • 第二证券股票杠杆:4分钟直线涨停!这一赛道,AH股集体爆发!
  • JavaScript 进阶征途:解锁Function奥秘,深掘Object方法精髓
  • 斜拉桥智慧施工数字孪生
  • 【chatGPT API】Function Calling:将自然语言转换为API调用或数据库查询
  • Oracle Hint /*+APPEND*/插入性能总结
  • 正邦科技(day3)