在 shell 偵測signal很簡單,就是trap。

用法為: trap [command/function]  sig1 sig2 ...

比如說:

#!/bin/bash

trap 'echo "got ctrl+c (SIGINT)"' 2
echo "Wait for SIGINT..."
sleep 10


如果在shell執行期間,不想被ctrl+c 中斷,也可以disable:

#!/bin/bash
trap '' 2
echo "Wait for SIGINT..."
sleep 5

這樣即使按了ctrl+c 也得等5秒。

另附上常用及完整列表

NumberSIGMeaning
0 0 On exit from shell
1 SIGHUP Clean tidyup
2 SIGINT Interrupt
3 SIGQUIT Quit
6 SIGABRT Abort
9 SIGKILL Die Now (cannot be trapped)
14 SIGALRM Alarm Clock
15 SIGTERM Terminate

 

名称    	      默认动作            说明
SIGHUP 终止进程 终端线路挂断
SIGINT 终止进程 中断进程
SIGQUIT 建立CORE文件 终止进程,并且生成core文件
SIGILL 建立CORE文件 非法指令
SIGTRAP 建立CORE文件 跟踪自陷
SIGBUS 建立CORE文件 总线错误
SIGSEGV 建立CORE文件 段非法错误
SIGFPE 建立CORE文件 浮点异常
SIGIOT 建立CORE文件 执行I/O自陷
SIGKILL 终止进程 杀死进程
SIGPIPE 终止进程 向一个没有读进程的管道写数据
SIGALARM 终止进程 计时器到时
SIGTERM 终止进程 软件终止信号
SIGSTOP 停止进程 非终端来的停止信号
SIGTSTP 停止进程 终端来的停止信号
SIGCONT 忽略信号 继续执行一个停止的进程
SIGURG 忽略信号 I/O紧急信号
SIGIO 忽略信号 描述符上可以进行I/O
SIGCHLD 忽略信号 当子进程停止或退出时通知父进程
SIGTTOU 停止进程 后台进程写终端
SIGTTIN 停止进程 后台进程读终端
SIGXGPU 终止进程 CPU时限超时
SIGXFSZ 终止进程 文件长度过长
SIGWINCH 忽略信号 窗口大小发生变化
SIGPROF 终止进程 统计分布图用计时器到时
SIGUSR1 终止进程 用户定义信号1
SIGUSR2 终止进程 用户定义信号2
SIGVTALRM 终止进程 虚拟计时器到时

 

 

 

kezeodsnx 發表在 痞客邦 PIXNET 留言(0) 人氣()