如何使用PID获取已成功完成的进程的执行命令?

如何使用PID获取已成功完成的进程的执行命令?

我有一个小脚本 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

相关内容