PIDを使用して正常に完了したプロセスの実行コマンドを取得するには?

PIDを使用して正常に完了したプロセスの実行コマンドを取得するには?

3つのパラメータを必要とする小さなスクリプトabc.kshがあります(例: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

pidsPIDを配列に順次入れる以外は、スクリプトの構造や内容についてあまり言及しません。

その後、同じ順序で同じPIDを待ちます。

nこれは、ループフェーズで待機しているコマンドがラインのパラメータを使用するnことを意味しますconfig.txt

問題を引き起こす唯一のことは、/procファイルシステムで実行したいことです。これは必要ありません。また、外部ループの状態を確認する必要があります(たとえば、$cnt最初の反復でファイルの行数と同じではありません)。config.txt

おすすめ記事