网站域名注册地址,wordpress少女祈祷,曲靖网站开发,一键建站文章目录 一、信号入门
1.linux信号的基本概念
2.使用kill -l 命令可以查看系统定义的信号列表
3.信号处理常见方式
二、产生信号
1.通过终端按键产生信号
2.通过调用系统函数向进程发信号
3.由软条件产生信号
4.硬件异常产生信号 1. /0异常 2.模拟野指针 一、信号入门… 文章目录 一、信号入门
1.linux信号的基本概念
2.使用kill -l 命令可以查看系统定义的信号列表
3.信号处理常见方式
二、产生信号
1.通过终端按键产生信号
2.通过调用系统函数向进程发信号
3.由软条件产生信号
4.硬件异常产生信号 1. /0异常 2.模拟野指针 一、信号入门
1.linux信号的基本概念 信号是进程之间事件异步通知的一种方式属于软中断。如用户输入命令在shell下启动一个前台进程。用户按下ctrlc这个键盘输入产生一个硬件终端被os获取解释为信号发送给目标前台进程前台进程因为收到信号进而引起进程退出。前台进程一般是bash,或者自己设置的进程ctrlc 可以杀掉前台进程./pro 后台进程无法使用ctrlc 只能使用kill-9shell可以同时运行一个前台进程和任意多个后台进程 2.使用kill -l 命令可以查看系统定义的信号列表 每个信号都有一个编号和一个宏定义名称这些宏定义可以在signal.h中找到编号34以上的信号都是实时信号
3.信号处理常见方式
忽略此信号执行该信号的默认处理动作提供一个信号处理函数要求内核在处理该信号时切换到用户态执行这个处理函数这种方式称为捕捉(catch)一个信号
二、产生信号
1.通过终端按键产生信号
SIGINT默认处理动作是终止进程SIGQUIT的默认处理动作是终止进程并且设置core dump
core dump: 当一个进程要异常终止时,可以选择把进程的用户空间内存数据全部 保存到磁盘上,文件名通常是core,这叫做Core Dump。进程异常终止通常是因为有Bug,比如非法内存访问导致段错误, 事后可以用调试器检查core文件以查清错误原因,这叫做Post-mortem Debug事后调试。一个进程允许产生多大的core文件取决于进程的Resource Limit(这个信息保存 在PCB中)。默认是不允许产生core文件的, 因为core文件中可能包含用户密码等敏感信息,不安全。在开发调试阶段可以用ulimit命令改变这个限制,允许产生core文件。 首先用ulimit命令改变Shell进程的Resource Limit,允许core文件最大为1024K: $ ulimit -c 1024 如按下ctrlc 产生kill进程的信号。 其具体过程是键盘被按下触发硬件终端控制器产生脉冲cpu的某个引脚接收响应寄存器x号设置为高点评此时找到cpu中的终端向量表中下标为x的函数指针函数指针中有对应的方法。os管理软硬件资源此时知道要从键盘中读取响应的数据到内存将键盘按下的组合键转化为信号找到前台进程将信号写入这个进程pcb的位图结构。 2.通过调用系统函数向进程发信号
kill命令 是调用kill函数实现的kill函数可以给一个指定的进程发送指定的信号
#includesignal.h
int kill(pid_t pid,int signo);
//发送成功返回0失败返回-1 2.rasie函数可以给当前进程发送指定的信号自己给自己发信号
int raise(int signo)
//成功返回0失败返回-1 3.abort函数 使当前进程接收到信号异常终止就想exit一样
void abort(void);
abort函数总是回成功的所以没有返回值
3.由软条件产生信号
#includeunistd.husigned int alarm(unsigned int seconds);
//调用alarm函数可以设定一个闹钟告诉os在seconds秒之后向进程发送SIGALRM信号该信号的默认处理动作是终止当前进程//该函数的返回值是0或者是以前设定闹钟的时间还剩余的秒数
如设定一个30s的闹钟在20s时由于别的进程让alarm响了此时函数返回10s
4.硬件异常产生信号 1. /0异常 硬件异常被硬件以某种方式检测到并通知os,然后内核向当前进程发送适当的信号。例如当前执行了/0的指令cpu的状态寄存器溢出os对软硬件资源管理发现异常os向进程中写入8号信号。 2.模拟野指针 void handler(int sig)
{printf(catch a sig: %d\n,sig);
}int main()
{signal(SIGSEVE,handler);int * p nullptr;*p 100;
}
运行上述代码发现有segmentation falut段错误。其具体原因是在执行进程是通过页表kv转换到物理内存如果kv有映射要看mmu权限有权限写入无权限mmu报错os找到进程pcb,向进程发送11号信号。如果kv无映射mmu映射报错。