Linux--信号signal、父子进程、SIGCHLD信号相关命令

news2025/2/24 3:19:50

目录

1.概念:

2.信号的存储位置:

3.常见的信号的值以及对应的功能说明:

4.信号的值在系统源码中的定义:

5.响应方式:

6.改变信号的相应方式:

(1)设置信号的响应方式:

(2)默认:SIG_DFL;忽略:SIG_IGN;

(3)默认响应方式:

(4).自定义响应方式:

(5)忽略:

 7.练习题目:

 8.15号信号和9号信号

9.SIGCHLD信号

(1)验证信号

(2)处理僵死进程(wait结合信号)


1.概念:

信号是系统响应某个条件而产生的事件 , 进程接收到信号会执行相应的操作 ;
与信号有关的系统调用在 <signal.h> 头文件中 :

2.信号的存储位置:

vim /usr/include/x86_64-linux-gnu/bits/signum.h

3.常见的信号的值以及对应的功能说明:

4.信号的值在系统源码中的定义:

信号名称 信号代号

#define SIGHUP 1
#define SIGINT 2 
#define SIGQUIT 3
#define SIGILL 4
#define SIGTRAP 5
#define SIGABRT 6
#define SIGIOT 6
#define SIGBUS 7
#define SIGFPE 8
#define SIGKILL 9 
#define SIGUSR1 10
#define SIGSEGV 11
#define SIGUSR2 12
#define SIGPIPE 13 
#define SIGALRM 14
#define SIGTERM 15 
#define SIGSTKFLT 16
#define SIGCHLD 17 
#define SIGCONT 18
#define SIGSTOP 19
#define SIGTSTP 20
#define SIGTTIN 21
#define SIGTTOU 22
#define SIGURG 23
#define SIGINT 2 // 键盘按下 Ctrl+c 时,会产生终端中断信号
#define SIGQUIT 3 // 键盘按下 Ctrl+\ 时,会产生终端退出信号
#define SIGKILL 9 // 该信号的响应方式不允许改变
#define SIGPIPE 13 // 读端关闭的描述符,写端写入时产生,该信号会终止程序 (
无读进程的管道写数据 )
#define SIGTERM 15 // 系统 kill 命令默认发送的信号
#define SIGCHLD 17 // 子进程结束后,会默认给父进程发送该信号

5.响应方式:

三种响应方式 : 默认 , 忽略 , 自定义 ;

6.改变信号的相应方式:

(1)设置信号的响应方式:

通过函数 signal();
man signal:

 

(2)默认:SIG_DFL;忽略:SIG_IGN;

自定义:void fun_sig(int sig);

(3)默认响应方式:

正常是默认 , 代码如下 :

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
int main()
{
    while(1)
    {
        printf("main run\n");
        sleep(1);
    }
   exit(0);
}

 

 ctr+c结束程序;

(4).自定义响应方式:

通过 signal 系统调用更改信号的响应方式 :

 

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<assert.h>
#include<signal.h>

void sig_fun(int sig)
{
    printf("sig=%d\n",sig);
}
int main()
{
    signal(SIGINT,sig_fun);
    while(1);
    {   
        printf("main run\n");
        sleep(1);
    }   
    exit(0);
}

ps -ef|grep "程序名字"

kill -9 PID

或者ctrl+\结束程序;

(5)忽略:

将上面12行的代码修改成:

signal(SIGINT,SIG_IGN);
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<assert.h>
#include<signal.h>

void sig_fun(int sig)
{
    printf("sig=%d\n",sig);
    siganl(sig,SIGDFL);
}
int main()
{
    signal(SIGINT,SIG_IGN);
    while(1);
    {   
        printf("main run\n");
        sleep(1);
    }   
    exit(0);
}

 7.练习题目:

第一次打印信号的代号,第二次按照默认形式把进程结束;

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <signal.h>
void sig_fun(int sig)
{
    printf("sig=%d\n",sig);
    signal(sig,SIG_DFL);
}
int main()
{
    signal(SIGINT,sig_fun);
    //signal(SIGINT,SIG_IGN);
    while(1)
    {
        printf("main run\n");
        sleep(1);
    }
    exit(0);
}

 8.15号信号和9号信号

15: kill 默认发送的信号
9 : 强制结束的信号 , 不允许改变

9.SIGCHLD信号

子进程结束 , 父进程会收到内核发送的 SIGCHLD 信号 ;

(1)验证信号

改变 SIGCHLD 信号的响应方式

(2)处理僵死进程(wait结合信号)

 

 

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
#include <sys/wait.h>

void fun(int sig)
{
    printf("sig=%d\n",sig);
    //int val=0;
    //int id=wait(&val);
    wait(NULL);
}
int main()
{
    signal(SIGCHLD,fun);
    char *s=NULL;
    int n=0;//控制父子进程执行的次数

    pid_t id=fork();
    assert(id!=-1);

    if(id==0)//子进程
    {
        s="child";
        n=3;
    }
    else//父进程
    {
        s="parent";
        n=7;
        // int val;
        // wait(&val);
        //printf("val=%d\n",val);
}

    //父子进程一起执行
    int i=0;
    for(;i<n;i++)
    {
        printf("s=%s,pid=%d,ppid=%d\n",s,getpid(),getppid());
        sleep(1);
    }
    exit(0);
}

 

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

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

相关文章

Android Studio 新版本 Logcat 的使用

前言 最近&#xff0c;Android Studio 自动更新了自带的 Logcat 工具&#xff0c;整体外观和使用方法变得和之前完全不同了。一开始我以为是自己按到什么不该按的按钮&#xff0c;把 Logcat 弄坏了&#xff0c;后来才知道是版本更新导致的。新版本的 Logcat 用命令来过滤信息&…

jmeter变量函数以及抓包用法

抓包 代理服务器&#xff1a; 自己启动一个代理服务器 本地&#xff0c;要使用代理服务器的ip和端口&#xff0c;使用自己启动的代理服务器 操作步骤 添加线程组测试计划 > 非测试元件 > http代理服务器一定要修改 修改为** 测试计划>线程 ip就是你自己电脑的ip&…

Activity

Activity生命周期图 官网的 Activity 的生命周期图&#xff1a; 在官方文档中给出了说明&#xff0c;不允许在 onPause() 方法中执行耗时操作&#xff0c;因为这会影响到新 Activity 的启动。 常见情况下Activity生命周期的回调 &#xff08;A 与 B 表示不同的 Activity &a…

(硬件设计)老工程师的经验之道

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录前言1、用蜡烛油固定电位器2、电路板接插件用彩色接插件前言 送给大学毕业后找不到奋斗方向的你&#xff08;每周不定时…

Python----科学计数法、同时给多个变量赋值、eval函数、math库函数、复数(complex())、内置的数值运算函数、内置的数值运算操作符

科学计数法使用字母"e"或者“E”作为幂的符号&#xff0c;以10为基数&#xff0c;科学计数法的含义如下&#xff1a; 96e4&#xff1a;96乘10的4次幂 4.3e-3&#xff1a;4.3乘10的负三次幂 aeb&#xff1a;a*10*b 同时给多个变量赋值格式: 变量1&#xff0c;变量2表…

基于Python的电影推荐系统

电影推荐系统 目录 电影推荐系统 1 数据描述 1变量说明 1程序介绍 2 本次课程作业在 small-movielens 数据集的基础上&#xff0c;对用户、电影、评分数据进行了处理&#xff0c;然后根据 Pearson 相关系数计算出用户与其他用户之间的相似度&#xff0c;根据相似度进行推荐和…

用Python来表白,把情书写进她的照片里

前言 这不已经十一月了&#xff0c;22年马上就过完了&#xff0c;各位兄弟有对象了吗&#xff0c;现在就是缺钱还缺对象 退一步来说&#xff0c;有心仪的人吗啊&#xff0c;如果有的话&#xff0c;看看这篇 程序员的表白小妙招吧 实现步骤 想要实现把情书写在像素中&#xf…

【Web-HTML基础】颜色赋值、背景图片、文本和字体相关样式、元素的显示方式display、盒子模型、部分标签自带外边距或内边距

目录 颜色赋值 背景图片 文本和字体相关样式 元素的显示方式display 盒子模型 盒子模型之content内容 盒子模型之margin外边距 盒子模型之border边框 盒子模型之padding内边距 部分标签自带外边距或内边距 综合代码实现 颜色赋值 三原色: 红绿蓝 RGB RedGreenBlue …

【2022秋招面经】——深度学习

文章目录请写出常用的损失函数&#xff0c;平方损失、交叉熵损失、softmax损失函数和hinge1. 0-1 损失函数2. 绝对值损失函数3. 平方损失函数4. log 对数损失函数5. 指数损失函数&#xff08;exponential loss&#xff09;6. Hinge 损失函数7. 感知损失(preceptron loss)函数8.…

网课查题接口系统使用教程

网课查题接口系统使用教程 本平台优点&#xff1a;免费查题接口搭建 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a;题库后台http://daili.jueguangzhe.cn/…

使用微服务实现多设备自动调度

在实现app自动化过程中&#xff0c;有时候我们需要将多个手机中的任务&#xff0c;按照某种规则进行调度&#xff0c;这时仅仅使用移动端的脚本就无法完成了&#xff0c;需要配合使用微服务来完成。下面就举个例子来实际说明如何使用。 需求 假设我们有100台手机做任务&#…

计算机毕业设计(附源码)python疫情下的学生出入管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

云IDE产品介绍

前言 CSDN开发云官网发布了最新产品【云IDE】产品&#xff01;【云IDE】将提供一键秒级构建云开发环境&#xff0c;是专为开发者打造的一款低代码开发产品&#xff0c;云端预制了常见的开发环境&#xff0c;无需下载安装&#xff0c;一键创建项目&#xff0c;灵活配置代码仓和云…

【数据库05】玩转SQL的高阶特性

前 言 &#x1f349; 作者简介&#xff1a;半旧518&#xff0c;长跑型选手&#xff0c;立志坚持写10年博客&#xff0c;专注于java后端 ☕专栏简介&#xff1a;相当硬核&#xff0c;黑皮书《数据库系统概念》读书笔记&#xff0c;讲解&#xff1a; 1.数据库系统的基本概念(数据…

22.10.31补卡 22CCPC桂林C题

Problem - C - Codeforces 这题题解是请教了学长之后才做出来的, 若是想看题解请看http://t.csdn.cn/unAyg 本篇文章只作为做题记录 写了一天半...感觉自己是不太适合写区域赛的题了, 还是多学学算法和数论好了 ---------------------------------------------------------…

学习笔记-NTLM中继

NTLM中继 免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关. NTLM hash 分为 NTLMv1 NTLMv2 NTLMv2 session 三种&#xff0c;NTLMv2 的强度比 NTLMv1 强了不少 &#xff0c;我们在实战中&#xff0c;如果获得的是 …

【Android Studio学习】第一篇、制作一个拥有登录和注册功能的简易APP

目录 第一部分、前言 1、目标效果 2、准备知识 第二部分、详细步骤 1、新建Empty工程 ​2、添加资源文件 3、搭建注册界面 4、搭建登录界面 5、编写注册界面和登录界面的代码 6、设置APP初始界面 7、连接手机&#xff0c;编译工程 第三部分、总结 1、参考资料 2、…

基于反馈技术的宽带低噪声放大器的设计

低噪声放大器是通信、雷达、电子对抗及遥控遥测系统中的必不可少的重要部件&#xff0c;它位于射频接收系统的前端&#xff0c;主要功能是对天线接收到的微弱射频信号进行线性放大&#xff0c;同时抑制各种噪声干扰&#xff0c;提高系统的灵敏度。特别是随着通信、电子对抗、微…

基于Java+Vue+uniapp微信小程序实现餐厅校园订餐平台

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取联系&#x1f345;精彩专栏推荐订阅&#x1f447;&#x1f…

springboot二手车交易系统

功能介绍 目 录 第一章 绪论 5 1.1研究背景 5 1.2平台现状分析 5 1.3系统实现的功能 5 1.4二手车交易管理信息系统的特点 6 1.5本文的组织结构 6 第二章开发技术与环境配置 7 2.1 SpringBoot框架 7 2.2Java语言简介 7 2.3 MySQL环境配置 8 2.4 MyEclipse环境配置 8 2.5 mysql数…