我有一个小脚本 abc.ksh 需要 3 个参数,例如 abc.ksh ${a} ${b} ${c}
我将从一个没有完整内容的配置文件中读取,然后使用 for 循环并行执行 abc.ksh 'n' 次。例如
export pids=()
for file in `cat config.txt`
do
a=`echo ${file}|awk -F"|" '{ print $1 }'`
b=`echo ${file}|awk -F"|" '{ print $2 }'`
c=`echo ${file}|awk -F"|" '{ print $3 }'`
nohup ksh abc.ksh ${a} ${b} ${c} &
pids+=("$!")
done
接下来,我需要检查每个作业的完成情况(基于 pid)并为该特定作业执行下一个操作项。例如
export cnt=0
while[ $cnt -eq `wc -l config.txt`]; do
export tmp=()
for p in ${pids[*]}; do
if[[ ! -d /proc/${p} ]]; then
wait ${p}
echo "Process completed with Process ID ${p}; exit code: $?"
if [[ $? -eq 0 ]]; then
cnt=`expr $cnt + 1`
***<Need to get the executed command "
nohup ksh abc.ksh {a} {b} {c}" for the successfully completed PID>.***
else
else
echo "Process with Process ID ${p} Still running."
tmp+=("${p}")
done
pids+=( ${tmp[*]})
done
我怎样才能得到它?
答案1
pids
除了注意到您以顺序方式将 PID 放入数组之外,我不会过多评论脚本的结构或内容。
然后您等待这些相同的 PID 的顺序相同。
n
这意味着您在循环步骤中等待的命令将使用 行中n
的参数config.txt
。
唯一会引起问题的是你对/proc
文件系统的尝试。这是不需要的。您还需要检查外循环的条件(例如,$cnt
不等于第一次迭代时文件中的行数)。config.txt