How to do multi-threading in BASH


#### Put list of commands in array

command_array[0]='<Linux_Command_1>'
command_array[1]='<Linux_Command_2>'
command_array[2]='<Linux_Command_3>'
command_array[3]='<Linux_Command_4>'

#### Array length

command_array_length=${#command_array[*]}

#### Iterate over array of commands & run in background. Store each process ID

for (( current_command_index=0; current_command_index<$command_array_length; current_command_index++ )); do

    command_string=${command_array[current_command_index]}
    
    result[$current_command_index]=`$command_string > output_$current_command_index` &
    
    process_array[$current_command_index]=$!
done

process_array_length=${#process_array[*]}

### Iterate over process array & wait for each process to finish (Join)

for (( process_index=0; process_index<process_array_length; process_index++ )); do

    current_process=${process_array[process_index]}
    wait $current_process
done

 

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.