我正在尝试编写一个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
语句中的脚本,然后在保持结果子进程的同时退出。除了将子级创建为后台进程之外,还有其他方法吗?
答案 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