前言
大家好吖,欢迎来到 YY 滴Linux系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁
主要内容含:
欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!
目录
一.信号的本质与相关概念
- 信号:是一种向目标进程发送通知消息的一种机制
- 信号本质:其实就是用软件,来模拟中断的行为(信号是进程之间事件异步通知的一种方式,属于软中断)
- 信号信号产生了,我们不一定要立即处理它,而是我们在合适的时候处理;我们要有一种能力,将已经到来的信号,
进行暂时保存
1.体现中断的例子:<ctrl+c产生信号终止前台进程>
例如:
- 我们在一个进程运行过程中,输入
ctrl+c
- 这个键盘输入产生一个硬件中断,被OS获取,解释成信号,发送给目标前台进程;前台进程因为收到信号,进而引起进程退出
[hb@localhost code_test]$ cat sig.c
#include <stdio.h>
int main()
{
while(1){
printf("I am a process, I am waiting signal!\n");
sleep(1);
}
}
[hb@localhost code_test]$ ./sig
I am a process, I am waiting signal!
I am a process, I am waiting signal!
I am a process, I am waiting signal!
^C
[hb@localhost code_test]$
二.系统定义的信号列表
1.用kill -l命令可以察看系统定义的信号列表
- 每个信号都有一个编号和一个宏定义名称,这些宏定义可以在signal.h中找到
- 例如其中有定 义
#define SIGKILL 9
2.(ps&kill&raise&abort)进程指令&信号相关函数
【总结】
- kill命令是调用kill函数实现的。kill函数可以给一个指定的进程发送指定的信号。
- raise函数可以给当前进程发送指定的信号(自己给自己发信号)。
- abort函数使当前进程接收到信号而异常终止。
【1】ps指令
-- 这个命令会列出当前终端会话中的所有进程
ps
-- 可以通过grep命令来过滤出特定的进程,例如:
ps | grep <特定的进程>
【2】kill&raise函数介绍与演示
#include <signal.h>
int kill(pid_t pid, int signo);
int raise(int signo);
这两个函数都是成功返回0,错误返回-1。
- kill命令是调用kill函数实现的。
- kill函数可以给一个指定的进程发送指定的信号。
- raise函数可以给当前进程发送指定的信号(自己给自己发信号)
演示:在后台执行死循环程序,然后用kill命令给它发SIGSEGV信号
【3】abort函数介绍与演示
- abort函数使当前进程接收到信号而异常终止
#include <stdlib.h>
void abort(void);
就像exit函数一样,abort函数总是会成功的,所以没有返回值。
标签:函数,YY,指令,kill,信号,Linux,进程,专栏,解析
From: https://blog.csdn.net/YYDsis/article/details/142026934