Date: Thu, 1 Nov 2007 17:09:43 +0000 (GMT) From: Jan Grant <jan.grant@bristol.ac.uk> To: David Naylor <blackdragon@highveldmail.co.za> Cc: freebsd-questions@freebsd.org Subject: Re: sh script difficulties (running parallel functions) Message-ID: <20071101170331.A41569@tribble.ilrt.bris.ac.uk> In-Reply-To: <b53f6f940711010931i7067aad0y8c0d2c76aeec3248@mail.gmail.com> References: <b53f6f940711010931i7067aad0y8c0d2c76aeec3248@mail.gmail.com>
index | next in thread | previous in thread | raw e-mail
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.
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20071101170331.A41569>
