如果在shell脚本中。带循环的函数有两个,我在脚本中运行了这两个函数,然后将两者都放在了后台。
例如:
#!/bin/bash
function a {
for 1 in 2; do
if 3.sh; then
echo 'done'
else
exit 1
fi
done
}
function b {
for a in b; do
if c.sh; then
echo 'done'
else
exit 1
fi
done
}
a &
b &
现在,由于这两个功能都在后台运行,因此一旦我运行脚本,它将立即完成。我的期望是捕获脚本的退出代码,这样,如果在循环a和b中发生任何错误,我就可以得到确认。
我的另一个担心是,如果在循环a期间发生任何事情,该脚本将立即终止(因为给出了退出代码1),所以即使b是无辜的,b也将终止。
答案 0 :(得分:0)
如果您等待后台作业,则wait
的退出状态将是该作业的退出状态。
a & a_pid=$!
b & b_pid=$!
wait $a_pid
a_status=$?
wait $b_pid
b_status=$?
您可能会反对,如果b
在a
之前完成,那么您必须等待获得b
的状态。 可能是个问题,但前提是您还有其他事情要做。不管先完成哪一项工作,两者所需的时间都相同。 (如果b
首先完成,那么wait $b_pid
一旦运行就将立即退出。)