shell trap信号捕获问题

SibylY 发布于 2016/05/31 20:50
阅读 365
收藏 0

求大牛指导 trap 捕获信号问题,具体描述如下:

如下 test.sh 代码

#!/bin/bash

echo $$
readonly SIGTERM=15
readonly SIGKILL=9
function kill_process() {
        local signal="$1"
        local num_sig="${SIGTERM}"
        if [[ "signal" = "SIGINT" ]]; then
                num_sig="${SIGINT}"
        fi
        echo "kill -s "${num_sig}" 0"
        kill -s "${num_sig}" 0
}
trap "kill_process SIGINT" SIGINT
trap "kill_process SIGTERM" SIGTERM

echo "name"
sleep 2000
(1)在terminate1,在目录下启动 sh test.sh ;

(2) 在terminate1,敲键盘指令 ctrl+c ;trap 捕获信号15,执行结果如下

3405
name

^Ckill -s 15 0
kill -s 15 0
kill -s 15 0
kill -s 15 0
kill -s 15 0
kill -s 15 0
kill -s 15 0
kill -s 15 0
kill -s 15 0
kill -s 15 0
kill -s 15 0
(3)新开一个 terminate2,用 kill -9 <进程 id>或 kill -s 9 <进程 id>发信号给进程,进程直接被 killed:

terminae1输出如下

12196
name
Killed
(4) terminate2,用 kill -15 <进程 id>或 kill -s 15 <进程 id>发信号给进程,terminate1起的进程不停止,也无输出,;

请问为何(3) (4)在terminate2,用 kill 发送信号,进程中的 trap不能捕获信号???






加载中
返回顶部
顶部