带陷阱的分段故障" kill 0"来自bash中的subshel​​l

时间:2018-05-21 17:01:22

标签: bash

我正在尝试编写一个并行构建多个Dockerfiles的小脚本,但是如果我想要取消脚本,我还想杀死子进程。这样做导致segmentation fault,不确定原因。

澄清我用^C

杀死脚本

trap "kill 0" SIGINT SIGTERM
DIRS=$( find . -name "Dockerfile" -printf "%h\n" )
for file in $DIRS; do  
    (   
        # testing script
        while :
        do
                echo "$file"
                sleep 1
        done
    ) & 
done
wait 

1 个答案:

答案 0 :(得分:1)

这个简单的脚本:

trap "kill 0" SIGTERM
kill 0

会导致分段错误 为什么呢?
kill命令将SIGTERM发送到进程。我们接收SIGTERM的过程为该信号执行信号处理程序,即kill 0。这会再次将SIGTERM发送到进程并再次执行信号处理程序。该过程一直停留到stack overflow,这会导致分段错误 使用bash -xset -x运行此类脚本会产生如下情况:

+ trap 'kill 0' SIGTERM
+ kill 0
++ kill 0
+++ kill 0
++++ kill 0
+++++ kill 0
...
+++++ ... so on ... ++++ kill 0
Segmentation fault (core dumped)

可能你的意思是trap "exit 0" SIGTERM