
У меня есть 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