如何在 bash 中进行并行处理?
我的方法,在我的 bash 脚本中,添加了很多后台作业&
,然后我使用数组添加每个进程 id,然后我使用循环获取该数组,并在其中使用 wait 命令,但不知何故wait
命令不是在职的。
我的代码是这样的
for i in some path
do
ls -d $i | xargs du -kh --max-depth=0 |sed 's/\t/,/g' >> $TEMP/Outfile/disk_usage_Session_wise.csv &
pid=$!
ls -d $i/session | xargs du -kh --max-depth=1 | sed 's/\t/,/g' >> $TEMP/Outfile/disk_usage_Session_wise.csv &
pid_1=$!
process_list=($pid $pid_1)
done
for job in echo ${process_list[@]}
do
echo "$job is running"
wait $job # this command is not working
done –
答案1
您可以使用其他软件还是仅使用 bash?看起来GNU Parallel
这就是您完成任务所需的。或者至少-n
有-P
论据xargs
答案2
这个改进的行应该修复脚本的第一部分:
process_list+=($pid $pid_1)
这应该是第二部分。请注意,它尚未经过测试。
for job in ${process_list[@]}
do
ps -ho pid | >/dev/null grep $job && {
echo "$job is running"
wait $job # this command should be ok now
}
done
ps -ho pid
-o pid
生成不带标题行 ( ) 的正在运行的进程 ( ) 列表-h
。|
它将这个列表转发到 ( )grep
grep
查找,$job
如果找到 ( ),则运行&&
命令块 ( ){echo ...}