병렬로 실행되더라도 단일 스크립트에 대한 반환 코드

병렬로 실행되더라도 단일 스크립트에 대한 반환 코드

nohup여러 테이블 이름을 매개변수로 사용하여 Unix에서 명령을 사용하여 병렬로 실행되는 jar 파일이 있습니다.

nohup java -jar batchorch.jar $tablename &

모든 jar 파일의 상태를 얻으려면 다음 줄을 사용합니다.

oldpid=$!
wait $oldpid
echo $?

jar각 파일은 병렬로 실행되지만 상태를 개별적으로 어떻게 확인할 수 있습니까?

답변1

백그라운드 프로세스를 완료 순서대로 처리하는 방법을 모르겠습니다.

#!/bin/bash
  
declare -a bg_pids

ec=0

(sleep 10; exit "$ec") &
bg_pids+=($!)
((ec++))

(sleep 10; exit "$ec") &
bg_pids+=($!)
((ec++))

(sleep 10; exit "$ec") &
bg_pids+=($!)
((ec++))

for pid in "${bg_pids[@]}"; do
    echo -n "PID ${pid}: "
    wait -f "$pid"
    echo $?
done

산출:

PID 29807: 0
PID 29808: 1
PID 29810: 2

답변2

GNU Parallel에 대한 정보는 다음에서 확인할 수 있습니다 --joblog.

nohup parallel --joblog my.log java -jar batchorch.jar {} ::: table1 table2 table3

관련 열은 Exitval입니다.

Seq     Host    Starttime       JobRuntime      Send    Receive Exitval Signal  Command
1       :       1597644202.601       0.003      0       0       1       0       java -jar batchorch.jar table1
2       :       1597644202.604       0.008      0       0       1       0       java -jar batchorch.jar table2
3       :       1597644202.613       0.005      0       0       1       0       java -jar batchorch.jar table3

관련 정보