我正在尝试编写一个并行构建多个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
答案 0 :(得分:1)
这个简单的脚本:
trap "kill 0" SIGTERM
kill 0
会导致分段错误
为什么呢?
kill命令将SIGTERM发送到进程。我们接收SIGTERM的过程为该信号执行信号处理程序,即kill 0
。这会再次将SIGTERM发送到进程并再次执行信号处理程序。该过程一直停留到stack overflow,这会导致分段错误
使用bash -x
或set -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
。