sh script difficulties (running parallel functions)

Jan Grant jan.grant at bristol.ac.uk
Thu Nov 1 10:10:54 PDT 2007


On Thu, 1 Nov 2007, David Naylor wrote:

> Hi,
> 
> I am having a hard time getting (very complex script for me) to work.  The
> basic idea is that this script runs a bunch of tarkets, many of which are
> time consuming but low on resources (such as downloading files).  Now if I
> run the tarkets all at once (given some dependancy issues) it greatly speeds
> up the process (about 5 time speed increase).  However I do not know how to
> do this using sh...
> 
> Example
> 
> #!/bin/sh
> 
> worker1() {
>   # Copy some files
> }
> 
> worker2() {
>   # Download some files
> }
> 
> worker3() {
>   # Do something else
> }
> 
> ..... # and so on
> 
> run_jobs() {
>   worker1 &
>   worker2 &
>   worker3 &
>   # !!! Somehow wait for over workers to finish before continuing !!!
> }
> 
> #Finished
> 
> Furthermore, how can signals be handled such that the signals get
> accumulated and once all the other workers have finished the signals get
> passed on (appropriately)

The "wait" shell builtin is part of what you're after.

You probably will need to trap the signals you're interested in 
catching. Just a

	trap 'int=1' INT
	wait
	trap - INT

	if [ "x$int" = x1 ]; then ... ; fi

should do it.


-- 
jan grant, ISYS, University of Bristol. http://www.bris.ac.uk/
Tel +44 (0)117 3317661   http://ioctl.org/jan/
There's no convincing English-language argument that this sentence is true.


More information about the freebsd-questions mailing list