Bash 在退出父进程之前是否在Sequential语句中运行子进程?
我正在尝试编写一个Bash脚本,当它接收到SIGINT信号时,会在退出之前创建自身的副本。因此,当用户试图使用SIGINT信号终止此脚本时,将重新显示进程的副本Bash 在退出父进程之前是否在Sequential语句中运行子进程?,bash,unix,sh,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,脚本都有多个进程(子进程和子进程的子进
trap "echo Exiting...?; ./ghoul.sh; exit 1" SIGINT
while :
do
echo Process Number $$, with PPID $PPID!
sleep 1
done
但是,每当我挂起进程并选中
ps-f
,脚本都有多个进程(子进程和子进程的子进程)。退出命令似乎从未运行过,因为它正在等待子项退出。我想找到一种方法来运行trap
语句中的脚本,然后在维护生成的子进程的同时退出。除了将子进程创建为后台进程之外,还有什么方法可以做到这一点吗?我发现将退出代码放入函数中要简单得多。例如,未加引号的echo包含一个裸?
,它是一个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