为什么陷阱不能中断nohup命令?

问题描述 投票:1回答:1

这是一个脚本,名称是test.sh

#!/bin/bash
cleanup(){
    echo "Caught SIGINT ..."
    exit 1

}    
trap 'cleanup' 3
    while :;do
        echo "a"
        sleep 3
    done

如果我直接在linux bash中运行nohup ./test.sh &,它可以捕获kill -3 PID信号,

但如果我在一个名为go.sh的脚本文件中写nohup ./test.sh &,并且我运行go.sh,那么test.sh无法捕获kill -3 PID信号

如何编写go.sh脚本以确保test.sh捕获-3信号?

linux bash shell signals nohup
1个回答
1
投票

kill -3SIGQUIT)无法运作。根据bash的手册:

当bash是交互式的时候,在没有任何陷阱的情况下,它会忽略SIGTERM(这样kill 0不会杀死交互式shell),并且SIGINT被捕获并处理(以便等待内置是可中断的)。在所有情况下,bash都会忽略SIGQUIT。如果作业控制生效,bash会忽略SIGTTINSIGTTOUSIGTSTP

© www.soinside.com 2019 - 2024. All rights reserved.