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