trap 信号处理

shell可以向进程发送信号,trap可以为特定信号进行回调处理。

trap语法:

  1. trap command SIGNAL1[ SIGNAL...]

trap指定的command可以为函数调用函数,多个trap处理相同信号会被后者覆盖。在捕获信号时等待shell处理完当前命令然后执行command。

常用的信号:

  • SIGTERM
  • SIGINT : 等价于ctrl+c。注意该信号只能中断前台进程,中断进程相关的子进程可以使用kill -15 -pid。

注意:

  • trap无法处理19 SIGSTOP信号

示例:

#!/bin/bash
trap_func()
{
echo "inside trap func"
}
func2()
{
echo "inside func2"
}

# trap trap_func 19

echo "process start"
sleep 20
echo "process end"

trap trap_func SIGTERM SIGINT
#echo "sleep 1"
#sleep 200 &
#echo "sleep 2"
#sleep 200
#echo "finish"

补充: sleep 200 & 表示在后台运行。 pstree -p pid 可以查看进程的进程树