Вы можете использовать wait
, если хотите использовать его как дочерний процесс.В противном случае удалите &
после $job
и всю строку wait $!
, как указано в примере.
#! /bin/bash
JOB_ARRAY=("/data/Job1.sh" "/data/Job2.sh" "/data/Job3.sh")
for job in "${JOB_ARRAY[@]}"; do
sync;
echo 3 > /proc/sys/vm/drop_caches;
echo "Starting job $job"
$job & # remove `&`
echo "Started job with pid $!"
wait $! # remove entire line
echo "Job finished, exit code is $?"
done
exit 0
РЕДАКТИРОВАТЬ:
В сценариях JobX.sh
вам придется подождатьпока дочерние процессы не завершены.Добавьте следующий код к каждому скрипту JobX.sh
:
NUM_PROC=$1
[ ! -z "${NUM_PROC}" ] || NUM_PROC=10
for i in `seq 0 $((NUM_PROC-1))`; do
awk 'BEGIN {for(i=0;i<10000;i++)for(j=0;j<10000;j++);}' &
done
echo "PIDS: `pidof awk`"
# Wait for every child process to finish
wait
exit $?
ps, вы всегда должны заканчивать свои скрипты с exit
.Всегда заключайте переменные в ""
, если вы используете их в операторах if, while, fir (и т. Д.).И попробуйте сделать функции вместо отдельных скриптов:
#! /bin/bash
function _test_echo {
local message=$1
echo $message
}
_test_echo "Hello world!"
exit 0
Удачи в скриптах!