Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在退出父进程之前是否在Sequential语句中运行子进程?_Bash_Unix_Sh - Fatal编程技术网

Bash 在退出父进程之前是否在Sequential语句中运行子进程?

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,脚本都有多个进程(子进程和子进程的子进

我正在尝试编写一个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包含一个裸
,它是一个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