标签:Term 调用 signal 默认 终止 信号 linux 进程
1. 信号理论基础
**信号共性:
简单、不能携带大量信息、满足条件才发送
**信号的特质:
信号是软件层面上的"中断"。一旦型号产生,无论程序执行到什么位置,必须立即停止运行,处理信号,处理结束,在继续执行后续指令。
所有信号的产生以及处理全部都是有【内存】完成的
*** 信号产生
1. 按键产生,ctrl+z、ctrl+c
2. 系统调用产生, 如果kill
3. 软件条件产生, sleep
4. 硬件异常产生, 段错误、
段错误: 1. 访问了不是自己内存, 比如malloc自己申请了区域,访问malloc区域外了
2. 对只读区进行修改 char* ch="abc" ch[0]='a'
5.命令产生,比如kill命令
未决: 产生与递达之间状态
递达: 产生送到内核,直接被内核处理掉
信号处理方式: 默认、忽略、捕捉(自定义)
linux内核进程控制块pcb是一个结构体,task_struct,除了包含进程id,状态,工作目录,用户id,组id,文件描述符表,
还包含信号相关信息,阻塞信号和未决信号
例子:
比如ctrl+c发送2号信号,那么未决信号集把第二位设置为1,那么内核发现第二未变成1了,处理2号信号,处理[默认、忽略、捕捉(自定义)]完毕第二位变成0
未决信号集把第二位设置为1
完毕第二位变成0
如果由于某种原因,把2号信号设置屏蔽,那么信号屏蔽字中2号变成1,那么信号不能递到内核,那么信号不能处理
等到屏蔽字中2号变成0,那么信号才可以被处理,未决信号集才把第二位设置为0
信号阻塞
2. 常用信号集
信号4要素:
信号编号、名称、 对应事件、默认处理动作
man 7 signal
Signal Value Action Comment
──────────────────────────────────────────────────────────────────────
SIGHUP 1 Term Hangup detected on controlling terminal
or death of controlling process
SIGINT 2 Term Interrupt from keyboard
SIGQUIT 3 Core Quit from keyboard
SIGILL 4 Core Illegal Instruction
SIGABRT 6 Core Abort signal from abort(3)
SIGFPE 8 Core Floating point exception
SIGKILL 9 Term Kill signal
SIGSEGV 11 Core Invalid memory reference
SIGPIPE 13 Term Broken pipe: write to pipe with no
readers
SIGALRM 14 Term Timer signal from alarm(2)
SIGTERM 15 Term Termination signal
SIGUSR1 30,10,16 Term User-defined signal 1
SIGUSR2 31,12,17 Term User-defined signal 2
SIGCHLD 20,17,18 Ign Child stopped or terminated
SIGCONT 19,18,25 Cont Continue if stopped
SIGSTOP 17,19,23 Stop Stop process
SIGTSTP 18,20,24 Stop Stop typed at terminal
SIGTTIN 21,21,26 Stop Terminal input for background process
SIGTTOU 22,22,27 Stop Terminal output for background processSIGUSR1 30,10,16 Term User-defined signal 1 不同操作系统对应value不一样,名称一样
1 SIGHUP: 当用户退出shell时,由该shell启动所有进程将接收这个信号,默认动作为停止进程
2 SIGINT: 相当于ctrl+c(终止/中断), 默认是终止进程
3 SIGQUIT: 相当于ctrl+\(退出), 默认是终止进程
6 SIGBUS: 总线错误,非法访问内存地址,默认终止进程产生core文件[用于gdb调试能够找到错误所在行,那么因为程序在终止的时候把错误信息写入了core文件]
8 SIGFPE: 发生致命运算错误时发生, 包括溢出,除数为0,默认终止进程产生core文件
10 SIGUSR1: 用户定义信号, 程序员可以在程序中定义并且使用该信号, 默认动作是终止进程
12 SIGUSR2: 用户定义信号, 程序员可以在程序中定义并且使用该信号, 默认动作是终止进程
*****
9 SIGKILL: 无条件终止进程, 不能被忽略、阻塞,上面的ctrl+c信号,如果把该信号捕捉掉,那么进程无法杀死,如果是病毒,完了
19 SIGSTOP:无条件停止
11 SIGSEGV: 进程在进程无效内存访问,默认终止进程产生core文件
13 SIGPIPE: 向一个没有读端的管道写数据,默认终止进程
14 SIGALRM: 定时器超时,超时时间 有系统调用alarm 设置,默认动作终止进程
17 SIGCHLD: 子进程终止时候、子进程接收到SIGSTOP信号停止时、子进程处停止态,接收到SIGCONT后唤醒时,告诉父进程,父进程可以去收尸了,默认忽略
20 SIGTSTP: ctrl+z. (暂停/停止)
标签:Term,调用,signal,默认,终止,信号,linux,进程 来源: https://blog.csdn.net/dreams_deng/article/details/104200379
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。