Background Jobs and Parallel Processing

Manages background jobs with &, wait, jobs, and process control for parallel task execution and synchronization in Bash scripts.

BashCli Tooling

Code

snippet
#!/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"