目录

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);
}

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

  1. Linux实验三父子进程每隔3秒,实验三进程的创建和简单控制(学生分析.doc

    实验三进程的创建和简单控制(学生分析 实验 进程的创建和简单控制 实验目的: 掌握进程的概念和进程的状态,对进程有感性的认识: 掌握进程创建方法: 认识进程的并发执行,了解进程族之间各种标识及其存在的 ...

  2. Linux下ps查找进程用kill终止命令

    Linux下ps查找进程用kill终止命令<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:offic ...

  3. 查看linux的用户 7.2,linux下查看用户登入系统相关命令及编写脚本(七)

    linux下查看用户登入系统相关命令及编写脚本(七) 查看用户登入系统日志 1.w 显示谁登入并正在做什么事 2.who 显示谁登入 -r:显示系统运行级别 3.sleep 睡眠命令(sleep 5 ...

  4. Linux之网络管理(6)ip及路由相关命令

    Linux之网络管理(6)ip及路由相关命令 linux中提供了很多强大的网络管理工具,而且每更新一些版本后都会有新功能.新工具的出现,对于ip和route设置最常用的,就是ifconfig.rout ...

  5. linux 进入编辑文件,保存退出相关命令

    linux 进入编辑文件,保存退出相关命令 1.进入文件 vim 文件名(vim test.xml) 2.编辑完成之后,按ESC键 跳到命令模式(命令前面冒号是必要的): :w 保存文件但不退出vi ...

  6. 信号实现父子进程之间的同步--sigsuspend的作用

    函数原型: #include <signal.h> int sigsuspend(const sigset_t *mask); 作用: 用于在接收到某个信号之前,临时用mask替换进程的信 ...

  7. PyQt5 中信号signal 与 槽 slot 的相关知识

    博文视点 文章写得太好了 转载学习 感谢 https://blog.csdn.net/broadview2006/article/details/78475842 在Qt中,每一个QObject对象和 ...

  8. 信号signal()、alarm()、信号集函数、sigprocmask()

    信号处理方式:     忽略 :但是SIGKEILL 和 SIGSTOP 不可以忽略:     捕捉信号: 但是不能捕捉 SIGKEILL 和 SIGSTOP :     执行默认操作: core文件 ...

  9. linux shell 脚本 父子进程 等待子进程,SHELL父子进程分析

    导言 本节将就shell交互(脚本执行)过程中涉及子进程(subprocess)以及子SHELL(subshell)的部分,配以实例,进行说明.将详细讨论如下问题:subprocess和subshel ...

  10. Linux 压缩管理、进程管理、网络管理命令总结

    一.压缩管理1 bunzip21.1 功能说明.bz2 文件的解压缩程序.1.2 语法bunzip2 [-fkLsvV][.bz2 压缩文件]1.3 补充说明bunzip2 可解压缩.bz2 格式的压 ...

最新文章

  1. Shell数组:shell数组的定义、数组长度
  2. 网工必看,万字网络排错笔记
  3. 期待着DELPHI的浴火重生
  4. cmd修改服务器命令,修改服务器的ip地址的命令行
  5. python tcp通信如何实现多人聊天,Python实现多用户全双工聊天(一对一),python多用户,多用户全双工聊天简陋...
  6. F#学习:类型的定义和使用语法
  7. TexStudio编译报错“Critical Package xeCJK Error: The xeCJK package requires XeTeX to function. ..._criti”
  8. Win7系统 待机后 不断网的 配置方法
  9. 用jquery替换dojo中的ajax
  10. POI数据获取-Python
  11. Java 搭建srs流媒体服务器,并使用ffmpeg推流
  12. 游戏中常见英语词汇,做游戏的,玩游戏总是要碰到的
  13. android l usb调试,你居然还不会手机usb调试?5个方法,让你轻松学会设置!
  14. 《漫步》flash动画制作全记录六
  15. ChromeCast Device Emulator的使用
  16. echarts的学习(六)调色盘的学习
  17. java.lang.IllegalArgumentException: Malformed \uxxxx encoding
  18. 三菱加工中心CNC编程G代码讲解
  19. 禁用笔记本触摸板功能
  20. 关于自己的一些想法-网络通用消费返点平台

热门文章

  1. 抖音小店无货源前期开店需要多少资金?多久能回本?
  2. 凡事预则立,不预则废。做事提前5分钟,更多主动权。
  3. 自然语言一般使用计算机,自然语言理解
  4. iphone版 天行skyline_‎App Store 上的“Skyline University”
  5. 最全数据集网站汇总,绝对是一个金矿请查收!
  6. 豆瓣电影数据可视化大屏
  7. 哪款分体式蓝牙耳机体验最好?便宜好用的分体式蓝牙耳机!
  8. 猪圆谷润铬羽丰,派满歌甜四海赢
  9. iPad 上如何使用 5G 网络以及支持型号
  10. 大佬H5网页手机端怎么应用微信快捷登陆?