退出所有子进程退出
在我的shell脚本中,'wait'不会等待xx.sh,yy.sh和zz.sh退出!为什么!退出所有子进程退出
#main.sh
#!/bin/bash
idx=0
while (($idx<1))
do`cd ff
./xx.sh >xx&
./yy.sh >yy&
./zz.sh >zz&
cd -
idx=$(($idx+1))
done|ls
wait
echo "END"
#xx.sh,yy.sh,zz.sh is for sleep
该命令在不同的子shell中运行,因此等待不会等待正确的进程。看到这一点,尝试
./xx.sh >xx &
./yy.sh >yy &
./zz.sh >zz &
wait #this should wait for all of the processes
如果你想使用一个循环来产卵,然后生成命令字符串运行,然后在主脚本(内不循环)运行它。
对不起,我没有完全描述。我需要的是带有子壳的环路。但是当我添加一个读取管道时,'wait'不起作用!然而,重定向输入是完美的!我找不到为什么! –
再次阅读答案。因为脚本不是父进程;父进程是一个被创建用于运行管道第一步的子shell。 – tripleee
是的,了解你的观点。谢谢!我必须了解更多关于管道的信息(我无法确定谁是父shell或子shell)。 –
#main.sh
#!/bin/bash
idx=0
(# subshell
while (($idx<1))
do
echo ./xx.sh \>xx&
echo ./yy.sh \>yy&
echo ./zz.sh \>zz&
sleep 5;
echo "all done";
idx=$(($idx+1))
done
)& FOR=$!
echo "Waiting for process $FOR"
wait $FOR
echo "END"
你的脚本似乎甚至没有解析..什么是'do'和'cd'之间的倒退? – phs