在退出父级之前先在顺序语句中运行子级进程吗?

时间:2018-06-26 04:10:13

标签: bash unix sh

我正在尝试编写一个Bash脚本,当它收到SIGINT信号时,会在退出之前创建其自身的副本。因此,当用户尝试使用SIGINT信号终止该脚本时,将重新出现该进程的副本。

trap "echo Exiting...?; ./ghoul.sh; exit 1" SIGINT 

while : 
    do
    echo Process Number $$, with PPID $PPID!
    sleep 1
done

但是,每当我暂停进程并检查ps -f时,脚本就会有多个进程(孩子和孩子的孩子)。 exit命令似乎从未运行过,因为它正在等待孩子退出。我想找到一种方法来运行trap语句中的脚本,然后在保持结果子进程的同时退出。除了将子级创建为后台进程之外,还有其他方法吗?

1 个答案:

答案 0 :(得分:1)

我发现将退出代码放入函数中要容易得多。例如,未加引号的回声包含一个裸露的?,它是一个glob(文件扩展)字符。为避免父母杀死孩子,您可以使用disown,是的,您需要在后台运行它。

尝试一下:

f_exit() {
    echo 'Exiting...?'
    ./ghoul.sh &
    disown -h %1
    exit 1
}
trap "f_exit" SIGINT

while :
    do
    echo "Process Number $$, with PPID $PPID!"
    sleep 1
done