【发布时间】:2015-12-11 19:11:02
【问题描述】:
我在基于 *nix 的操作系统上运行,并且有一个脚本可以同时启动多个进程。我的主要目标是同时启动这些进程,并为每个进程收集返回的退出状态。我发现使用wait(pid) 可以实现这一点,因为所有子进程都归父进程所有。但是,我担心一旦子进程(启动的并发进程之一)完成,它的 PID 将被释放并可以在系统内回收。
所以我想问题是,如果一个父进程同时启动多个子进程,是否会在父进程完成之前将完成的子进程的 PID 提供给系统用于回收之前 ?如果是这样,我怎样才能最好地获取每个子进程的退出状态?
下面的 bash 脚本示例:
local file=$1
local count=0
<files are split; and suffixed with aa,ab,ac,ad>
/home/text/concurrencyTest.sh $file-aa >> /home/text/$file-aa.log 2>&1 &
/home/text/concurrencyTest1.sh $file-ab >> /home/text/$file-ab.log 2>&1 &
/home/text/concurrencyTest2.sh $file-ac >> /home/text/$file-ac.log 2>&1 &
/home/text/concurrencyTest3.sh $file-ad >> /home/text/$file-ad.log 2>&1 &
for job in `jobs -p`
do
echo "Job: $job"
wait "$job"
rc=$?
echo "RC for $job is $rc"
if [[ rc -ne 0 ]]; then
FAIL[$count]="$job"
((count++))
fi
done
if [[ $count -ne 0 ]]; then
echo "ERROR: $count Job(s) Failed!"
echo "Failed Process PID(s): ${FAIL[@]}"
echo "Failed Processing for file: $file"
return 1
fi
【问题讨论】:
标签: linux concurrency pid exit-code return-code