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
pids
PIDを配列に順次入れる以外は、スクリプトの構造や内容についてあまり言及しません。
その後、同じ順序で同じPIDを待ちます。
n
これは、ループフェーズで待機しているコマンドがラインのパラメータを使用するn
ことを意味しますconfig.txt
。
問題を引き起こす唯一のことは、/proc
ファイルシステムで実行したいことです。これは必要ありません。また、外部ループの状態を確認する必要があります(たとえば、$cnt
最初の反復でファイルの行数と同じではありません)。config.txt