3.3、信号的概念、认识、处理动作
1、信号的基本概念
进程之间的常用通信手段:发送信号 kill
信号:通知,用来通知某个进程发生了某一个事情;
信号都是突发事件,信号是异步发生的,信号也被称为“软件中断”;
信号如何产生:a、某个进程或者发送给另外一个进程或者自己
b、有内核发送给某个进程
在键盘上输入Ctrl+C,kill命令;内存访问异常:除数为0,越界
热升级,新启动新的master进程。给老的master进程发送信号
信号的名字:都是以SIG开头,SIGHUP终端断开信号。都是一些正整数常量,宏
在signal.h里面 usr/include
sudo find / -name "signal.h" | xargs grep -in "SIGHUP"
-I 忽略大小写 -n 显示出行号 xargs:用来给其他命令传递参数
从根目录开始搜索所有的signal.h的文件,再xargs传递给grep 内容搜索SIGHUP文本
结果看到信号是宏定义。
2、通过kill命令认识一些信号
kill:发个信号给进程:能给进程发送多种信号。
ps -eo pid,ppid,sid,tty,pgrp,comm | grep -E 'bash|PID|nginx'
通过strace工具观察kill pid发送了一个SIGTERM【终止】信号
kill -1 pid 发送了SIGHUP信号 ,以此类推。
kill -2 pid 发送了SIGINT信号,默认动作是杀死进程
3、进程的状态
ps -eo pid,ppid,sid,tty,pgrp,comm,stat | grep -E 'bash|PID|nginx'
ps aux | grep -E 'bash|PID|nginx'
S+:休眠+前台运行
T :停止或被追踪
贴图:
3.3、信号的概念、认识、处理动作
4、常用的信号列举
贴图:
3.3、信号的概念、认识、处理动作
SIGKILL,SIGSTOP不能被进程忽略,也不能被捕捉。
5、信号处理的相关动作
当某个信号出现时,我们可以按三种方式之一进行处理,
我们称之为信号处理相关动作。
5.1、执行系统默认动作,绝大部分是杀死进程
5.2、忽略 signal(SIGINT, SIGIGN)
5.3、捕捉该信号,写一个信号处理函数处理该信号。特权信号也不能被捕捉。