
1、Linux信号类型 信号(Signal):信号是在软件层次上对中断机制的一种模拟,通过给一个进程发送信号,执行相应的处理函数。 进程可以通过三种方式来响应一个信号: 1)忽略信号,即对信号不做任何处理,其中有两个信号不能忽略:SIGKILL及SIGSTOP。 2)捕捉信号。 3)执行缺省操作,Linux对每种信号都规定了默认操作。 Linux究竟采用上述三种方式的哪一个来响应信号呢?取决于传递给响应的API函数。 Linux支持的信号有:
CoreDump(核心转储):当程序运行过程中异常退出时,内核把当前程序在内存状况存储在一个core文件中,以便调试。 Linux支持两种信号: 一种是标准信号,编号1-31,称为非可靠信号(非实时),不支持队列,信号可能会丢失,比如发送多次相同的信号,进程只能收到一次,如果第一个信号没有处理完,第二个信号将会丢弃。 另一种是扩展信号,编号32-64,称为可靠信号(实时),支持队列,发多少次进程就可以收到多少次。 信号类型比较多,我们只要了解下,记住几个常用信号就行了,红色标记的我觉得需要记下。 发送信号一般有两种情况: 一种是内核检测到系统事件,比如键盘输入CTRL+C会发送SIGINT信号。 另一种是通过系统调用kill命令来向一个进程发送信号。 2、kill命令kill命令发送信号给进程。 命令格式:kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... kill -l [sigspec] -s # 信号名称 -n # 信号编号 -l # 打印编号1-31信号名称 示例:
trap命令定义shell脚本在运行时根据接收的信号做相应的处理。 命令格式:trap [-lp] [[arg] signal_spec ...] -l #打印编号1-64编号信号名称 arg # 捕获信号后执行的命令或者函数 signal_spec # 信号名或编号 一般捕捉信号后,做以下几个动作: 1)清除临时文件 2)忽略该信号 3)询问用户是否终止脚本执行 示例1:按CTRL+C不退出循环
示例2:循环打印数字,按CTRL+C退出,并打印退出提示
示例3:让用户选择是否终止循环
|