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

관련 정보