Running concurrent commands in a script generally is done by executing processes in the background. Numerous commands can be spawned concurrently then synchronized by waiting for some, or all, of them to complete before proceeding or terminating the parent script.
1 #!/bin/bash
2
3 sleep 10 &
4 pId1=$!
5
6 sleep 2 &
7 pId2=$!
8
9 sleep 3 &
10 pId3=$!
11
12 echo "waiting for jobs to complete"
13 #wait ; #--wait for all jobs to complete
14 wait $pId1 $pId2 $pId3 ; #--wait for specific jobs to complete
In the above script, a sequence of sleeping {10, 2, and 3} seconds are executed in sequence, each in the background. The longest running command (e.g. 10 seconds in this example) should take 10 seconds, the other two commands concluding earlier.
We can test the proper exection, the script completing in ~10 seconds by timing the execution as follows:
$ time ./foo
waiting for jobs to complete
real 0m10.008s
user 0m0.003s
sys 0m0.004s
$
bash-4.1$
No comments:
Post a Comment