Background Jobs and Parallel Processing
Manages background jobs with &, wait, jobs, and process control for parallel task execution and synchronization in Bash scripts.
Code
#!/usr/bin/env bash
set -uo pipefail
# Launch background jobs
echo "Starting parallel jobs..."
for i in 1 2 3 4 5; do
(
echo "Job $i started"
sleep $(( RANDOM % 3 + 1 ))
echo "Job $i completed"
) &
done
# Wait for all background jobs
wait
echo "All jobs completed"
# Capture background job output
declare -A results
for i in 1 2 3; do
(
result=$(( i * i ))
echo "$result" > "/tmp/job-$i-$$"
) &
done
wait
for i in 1 2 3; do
results[$i]=$(cat "/tmp/job-$i-$$" 2>/dev/null)
rm -f "/tmp/job-$i-$$"
done
echo "Results: ${results[1]}, ${results[2]}, ${results[3]}"
# Parallel with job limit
max_jobs=3
running=0
process_item() {
local item=$1
echo "Processing $item..."
sleep 1
echo "Done: $item"
}
for item in {1..10}; do
process_item "$item" &
((running++))
if (( running >= max_jobs )); then
wait -n
((running--))
fi
done
wait
echo "All parallel work done"Report a problem with this exampleOpens a pre-filled issue on GitHub.