linux代码实操——信号的使用

信号的基本概念

 信号是系统响应某个条件而产生的事件,进程接收到信号会执行相应的操作。

与信号有关的系统调用在“signal.h”头文件中有声明 常见信号的值,及对应的功能说明:

 

 

 修改信号的响应方式 – signal()

 

 

我们来做个小实验:

 

在键盘上按下 Ctrl+c 时,会给当前终端前台执行的进程发送 SIGINT 信号,用 signal 修

 

改 SIGINT 信号的响应方式示例代码如下:

 

代码注释如下:1. #include<stdio.h> // 包含输入输出的头文件
2. #include<stdlib.h> // 包含一些常用函数的头文件
3. #include<unistd.h> // 包含一些系统调用的头文件
4. #include<string.h> // 包含字符串操作的头文件
5. #include<assert.h> // 包含断言的头文件
6. #include <signal.h> // 包含信号相关的头文件8. void fun(int sign) // 定义一个名为fun的函数,参数为sign
9. {
10. printf("fun was called, sign = %d\n", sign); // 输出一段信息,包含参数sign的值
11. }13. int main() // 主函数
14. {
15. signal(SIGINT, fun); // 注册信号SIGINT,并在接收到信号时调用函数fun
16. while(1) // 无限循环
17. {
18. sleep(1); // 程序休眠1秒钟
19. printf("main running\n"); // 输出一段信息
20. }
21.
22. exit(0); // 退出程序
23. }

 

 发送信号 – kill()

 

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 <stdlib.h> //标准库头文件,包含一些基本函数,如exit()
#include <unistd.h> //Unix标准头文件,包含一些基本系统函数,如kill()
#include <string.h> //字符串处理头文件
#include <assert.h> //断言处理头文件
#include <signal.h> //信号处理头文件int main(int argc, char* argv[])//pid, sig
{if ( argc != 3 )//判断参数数量是否正确{printf("argc error\n");//打印错误信息exit(0);//退出程序}int pid = 0;//定义pid变量int sig = 0;//定义sig变量sscanf(argv,"%d",&pid);//将第一个参数转换成整型并赋值给pidsscanf(argv,"%d",&sig);//将第二个参数转换成整型并赋值给sigif ( kill(pid,sig) == -1 )//向pid进程发送sig信号{perror("kill error");//打印错误信息}exit(0);//退出程序
}

 

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

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

相关文章

【设计模式】JAVA Design Patterns——Abstract-document

&#x1f50d; 目的 使用动态属性&#xff0c;并在保持类型安全的同时实现非类型化语言的灵活性。 &#x1f50d; 解释 抽象文档模式使您能够处理其他非静态属性。 此模式使用特征的概念来实现类型安全&#xff0c;并将不同类的属性分离为一组接口 真实世界例子 考虑由多个部…

Java面试八股文(SpringCloud篇)

****************************************************

【编程基础】人人都应该懂得递归小知识

文章目录 什么是递归递归和栈尾递归递归和分治归并排序 递归和树 什么是递归 下面引用刘汝佳的《算法竞赛入门经典》中对递归的定义&#xff1a; 递归&#xff1a;参见递归。递归&#xff1a;如果你还不理解递归是什么&#xff0c;请参见递归。 递归事实上就是函数直接或间接…

94、动态规划-最长公共子序列

递归的基本思路&#xff1a; 比较两个字符串的最后一个字符。如果相同&#xff0c;则这个字符一定属于最长公共子序列&#xff0c;然后在剩余的字符串上递归求解。如果最后一个字符不相同&#xff0c;则分两种情况递归求解&#xff1a; 去掉 text1 的最后一个字符&#xff0c;保…

使用Maven对Scala独立应用程序进行编译打包

一、 安装Maven 1.解压&#xff0c;移动安装包 sudo tar -zxf ~/apache-maven-3.9.6-bin.tar.gz -C /usr/local/ cd /usr/local/ sudo mv apache-maven-3.9.6/ ./maven-3.9.6 sudo chown -R qiangzi ./maven-3.9.6 二、Scala应用程序代码 1.在终端中执行如下命令创建一个文…

学习笔记:【QC】Android Q - IMS 模块

一、IMS init 流程图 高清的流程图参考&#xff1a;【高清图&#xff0c;保存后可以放大看】 二、IMS turnon 流程图 高清的流程图参考&#xff1a;【高清图&#xff0c;保存后可以放大看】 三、分析说明 1、nv702870 不创建ims apn pdp 2、nv702811 nv702811的时候才创建…

企业网盘竟还能这样用,可道云teamOS:三大冷门使用技巧分享

在日常工作中&#xff0c;大家是否有为海量的文件的管理感到头疼&#xff1f; 每当急需某个重要文件时&#xff0c;总是在各种文件夹中寻寻觅觅半天。这种困扰&#xff0c;我相信许多人都有过。 在这种时候&#xff0c;专业的文件管理软件能帮助我们解决大部分的麻烦。 今天我…

【PX4-AutoPilot教程-TIPS】Matlab使用ROS Toolbox编译MAVROS2消息报错缺少geographic_msgs消息

Matlab使用ROS Toolbox编译MAVROS2消息报错缺少geographic_msgs消息的解决方法 问题描述解决方法 环境&#xff1a; MATLAB : R2022b ROS Toolbox : 1.6 Windows &#xff1a;Windows 10 22H2 ROS &#xff1a;ROS2 Foxy 问题描述 在使用Matlab的ROS Toolbox工具箱编译与…

漫画对话 ai翻译

復讐の教科書ーー81 81-1 いい加減吐け&#xff01;&#xff01;冴木&#xff01;&#xff01; 快说吧&#xff01;&#xff01;冴木&#xff01;&#xff01; お前が一連の事件の犯人なんだろ&#xff01;&#xff1f; 你就是连续事件的犯人吧&#xff01;&#xff1f; だか…

59. 【Android教程】多线程

多线程可以让你同时异步执行多种任务&#xff0c;是各种编程语言里很重要的一个概念。合理的采用多线程可以让你的 App 拥有更好的运行性能&#xff0c;但是如果使用不当可能会让你的程序非常混乱&#xff0c;出现很多令人费解且难以定位的问题。 1. 多线程初探 当用户打开一个…

python+pycharm安装教程

介绍 Python提供了高效的高级数据结构&#xff0c;还能简单有效地面向对象编程。Python语法和动态类型&#xff0c;以及解释型语言的本质&#xff0c;使它成为多数平台上写脚本和快速开发应用的编程语言&#xff0c;Python解释器易于扩展&#xff0c;可以使用C、C或其他可以通过…

企业为什么要自己搭建企业邮箱?

近年来&#xff0c;随着企业信息化建设的加速&#xff0c;企业邮箱在企业的对外沟通和对内管理过程中发挥着重要作用&#xff0c;已经成为企业使用频次高的办公应用之一。然而&#xff0c;随着企业邮箱的广泛应用以及所产生的数据越来越多&#xff0c;也为企业的运营带来了巨大…