Forking / Multi-Threaded Processes | Bash
bash, fork, shell
Solution
In bash scripts (non-interactive) by default JOB CONTROL is disabled so you can't do the the commands: job, fg, and bg.
Here is what works well for me:
#!/bin/sh
set -m # Enable Job Control
for i in `seq 30`; do # start 30 jobs in parallel
sleep 3 &
done
# Wait for all parallel jobs to finish
while [ 1 ]; do fg 2> /dev/null; [ $? == 1 ] && break; done
The last line uses "fg" to bring a background job into the foreground. It does this in a loop until fg returns 1 ($? == 1), which it does when there are no longer any more background jobs.
Problem
I would like to make a section of my code more efficient. I'm thinking of making it fork off into multiple processes and have them execute 50/100 times at once, instead of just once. For example (pseudo): ``` for line in file; do foo; foo2; foo3; done ``` I would like this for loop to run multiple times. I know this can be done with forking. Would it look something like this? ``` while(x <= 50) parent(child pid) { fork child() } child { do foo; foo2; foo3; done return child_pid() } ``` Or am I thinking about this the wrong way? Thanks!