11-LINUX--信号

一.信号的基本概念

信号是系统响应某个条件而产生的事件,进程接收到信号会执行相应的操作。
与信号有关的系统调用在“signal.h”头文件中有声明
常见信号的值,及对应的功能说明:
信号的值在系统源码中的定义如下:
1. #define SIGHUP 1
2. #define SIGINT 2 //键盘按下 Ctrl+c 时,会产生该信号
3. #define SIGQUIT 3
4. #define SIGILL 4
5. #define SIGTRAP 5
6. #define SIGABRT 6
7. #define SIGIOT 6
8. #define SIGBUS 7
9. #define SIGFPE 8
10. #define SIGKILL 9 //该信号的响应方式不允许改变
11. #define SIGUSR1 10
12. #define SIGSEGV 11
13. #define SIGUSR2 12
14. #define SIGPIPE 13 //读端关闭的描述符,写端写入时产生,该信号会终止程序
15. #define SIGALRM 14
16. #define SIGTERM 15 //系统 kill 命令默认发送的信号
17. #define SIGSTKFLT 16
18. #define SIGCHLD 17 //子进程结束后,会默认给父进程发送该信号
19. #define SIGCONT 18
20. #define SIGSTOP 19
21. #define SIGTSTP 20
22. #define SIGTTIN 21
23. #define SIGTTOU 22
24. #define SIGURG 23

二.修改信号的响应方式

1.信号的三种响应方式

 (1).默认:SIG_DFL;按照信号的默认程序执行

 (2).忽略:SIG_IGN;忽略信号,不做出响应

 (3).自定义:自己设计信号处理函数

在键盘上按下 Ctrl+c 时,会给当前终端前台执行的进程发送 SIGINT 信号,用 signal 修
改 SIGINT 信号的响应方式示例代码如下:
 #include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>#include<assert.h>#include <signal.h>void fun(int sign)
{printf("fun was called, sign = %d\n", sign);}int main(){signal(SIGINT, fun);while(1){sleep(1);printf("main running\n");}exit(0);}
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<signal.h>
#include<unistd.h>void fun(int sig)
{printf("sig=%d\n",sig);signal(SIGINT,SIG_DFL);//第二次按默认方式进行//signal(sig,SIG_DFL);
}int main()
{signal(SIGINT,fun);//自定义
//      signal(SIGINT,SIG_IGN);//忽略while(1){printf("hello,  pid=%d\n",getpid());sleep(1);}
}

三.发送信号

kill() 可以向指定的进程发送指定的信号:
      int kill(pid_t pid, int sig);
      pid > 0 指定将信号发送个那个进程
      pid == 0 信号被发送到和当前进程在同一个进程组的进程
      pid == -1 将信号发送给系统上有权限发送的所有的进程
      pid < -1 将信号发送给进程组 id 等于 pid 绝对值,并且有权限发送的所有的进程。
      sig 指定发送信号的类型。
使用 kill()系统调用实现类似于系统 kill 命令的程序如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<signal.h>
#include<unistd.h>
// ./main 3455 2
int main(int argc ,char* argv[])
{if(argc != 3){printf("main err\n");exit(0);}int pid = 0;int sig = 0;sscanf(argv[1],"%d",&pid);sscanf(argv[2],"%d",&sig);if(kill(pid,sig) == -1){printf("mykill err\n");}exit(0);
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker容器环境安装记录(MAC M1)(完善中)

0、背景 在MAC M1中搭建商城项目环境时&#xff0c;采用docker统一管理开发工具&#xff0c;期间碰到了许多环境安装问题&#xff0c;做个总结。 1、安装redis 在宿主机新建redis.conf文件运行创建容器命令&#xff0c;进行容器创建、端口映射、文件挂载、以指定配置文件启动…

如何备考2024年AMC10:吃透2000-2023年1250道真题(限时免费送)

2024年AMC10美国数学竞赛还有6个多月就要启动了&#xff0c;那么如何在AMC10比赛中取得好成绩呢&#xff1f;一个被实践的方法是&#xff1a;系统研究和吃透AMC10的历年真题。即使不参加AMC10竞赛&#xff0c;掌握了这些知识和解题思路后初中和高中数学会学得比较轻松、游刃有余…

Spatio-Temporal Pivotal Graph Neural Networks for Traffie Flow Forecasting

摘要:交通流量预测是一个经典的时空数据挖掘问题,具有许多实际应用。,最近,针对该问题提出了各种基于图神经网络(GNN)的方法,并取得了令人印象深刻的预测性能。然而,我们认为大多数现有方法忽视了某些节点(称为关键节点)的重要性,这些节点自然地与多个其他节点表现出…

腾讯云服务器99元一年是真的吗?真的,99元服务器申请入口

腾讯云服务器99元一年是真的吗&#xff1f;真的&#xff0c;99元优惠购买入口 txybk.com/go/99 折合每天8元1个月&#xff0c;腾讯云99元服务器配置为2核2G4M带宽&#xff0c;2024年99元服务器配置最新报价为99元一年&#xff0c;续费也是99元&#xff0c;如下图&#xff1a; …

色彩在设计中的重要性

title: 色彩在设计中的重要性 date: 2024/4/6 19:08:21 updated: 2024/4/6 19:08:21 tags: 色彩心理品牌识别用户体验文化差异创意设计视觉传达易读性 色彩是设计中不可或缺的元素&#xff0c;它不仅可以影响人的情绪和心理状态&#xff0c;还可以在品牌识别、用户体验、文化差…

最短路计数

题目描述 给出一个 N 个顶点 M 条边的无向无权图&#xff0c;顶点编号为 1∼N。问从顶点 1 开始&#xff0c;到其他每个点的最短路有几条。 输入描述 第一行包含 2 个正整数 N,M&#xff0c;为图的顶点数与边数。 接下来 M 行&#xff0c;每行两个正整数 x,y&#xff0c;表示…

ELK报错,索引变成只读状态。

问题描述 今天发现当天的索引在ES中并没有创建&#xff0c;logstash中不停的报错&#xff1a; [2021-05-24T05:47:51,904][INFO ][logstash.outputs.elasticsearch] retrying failed action with response code: 403 ({“type”>“cluster_block_exception”, “reason”&g…

Navicat设置mysql权限

新建用户&#xff1a; 注意&#xff1a;如果不生效执行刷新命令:FLUSH PRIVILEGES; 执行后再重新打开查看&#xff1b; 查询权限命令&#xff1a;1234为新建的用户名&#xff0c;localhost为访问的地址 SHOW GRANTS FOR 1234localhost;如果服务器设置服务器权限后可能会出现权…

基于SpringBoot+Vue小型企业办公动化系统的设计和开发(源码+部署说明+演示视频+源码介绍+lw)

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。&#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精通…

Ubuntu/Centos文件误删恢复

Linux服务器上的文件存储都承载着大量的重要信息。然而,文件误删、软件故障或恶意攻击等风险总是伴随着我们。当这些不幸发生时,如何有效地恢复数据成为了一个亟待解决的问题。幸运的是,有相关的数据恢复工具,它能够帮助我们解决Linux服务器上的文件误删问题。 注意:该软…

Unity性能优化篇(十四) 其他优化细节以及UPR优化分析器

代码优化&#xff1a; 1. 使用AssetBundle作为资源加载方案。 而且经常一起使用的资源可以打在同一个AssetBundle包中。尽量避免同一个资源被打包进多个AB包中。压缩方式尽量使用LZ4&#xff0c;少用或不要用LZMA的压缩方式。如果确定后续开发不会升级Unity版本&#xff0c;则可…

C++不知算法系列之滑动指针

公众号&#xff1a;编程驿站 1. 前言 双指针搜索算法&#xff0c;常见的有左右双指针&#xff1b;快慢双指针&#xff1b;先后双指针以及多指针……其中还包括一类滑动指针。滑动指针也称为滑动窗口指针&#xff0c;其搜索实现即有灵性又透着优雅。 本文通过几个案例聊聊滑动…