код возврата отдельного скрипта, хотя они работают параллельно

код возврата отдельного скрипта, хотя они работают параллельно

У меня есть jar-файл, который работает параллельно с несколькими именами таблиц в качестве аргументов с помощью nohupкоманды в unix

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

Связанный контент