From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26863 invoked by alias); 13 Dec 2011 17:33:13 -0000 Mailing-List: contact zsh-users-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Users List List-Post: List-Help: X-Seq: 16634 Received: (qmail 7256 invoked from network); 13 Dec 2011 17:33:01 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_HI, SPF_HELO_PASS autolearn=ham version=3.3.2 Received-SPF: pass (ns1.primenet.com.au: SPF record at mail.nih.gov designates 128.231.90.98 as permitted sender) X-IronPortListener: NIH_Relay X-SBRS: None X-IronPort-AV: E=Sophos;i="4.71,343,1320642000"; d="scan'208";a="60483115" X-Authentication-Warning: cosy.cit.nih.gov: arif set sender to Anthony R Fletcher using -f Date: Tue, 13 Dec 2011 12:32:37 -0500 From: Anthony R Fletcher To: Subject: Re: wait for the next process to finish Message-ID: <20111213173237.GA10838@cosy.cit.nih.gov> Mail-Followup-To: zsh-users@zsh.org References: <20111212154601.GA5198@cosy.cit.nih.gov> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.0 (cake.cit.nih.gov [165.112.93.31]); Tue, 13 Dec 2011 12:32:38 -0500 (EST) On 13 Dec 2011 at 11:04:44, Rory Mulvaney wrote: > pids=( ) > R=( $RANDOM $RANDOM ) > echo $R > coproc () { sleep $(( $R[1]/32767.0*20 )) ; echo $$ } > pids+=$! > # copy the coproc fd > exec 3<&p > coproc () { sleep $(( $R[2]/32767.0*20 )) ; echo $$ } > pids+=$! > exec 4<&p > zmodload zsh/zselect > zselect -r 3 4 > echo $reply > > Then one could parse $reply. > > I don't know, maybe there's a much easier way to create file descriptors > for those processes? > > -Rory I was using this loop for f in *.txt do what-ever-has-to-happen $f & pwait 20 done where pwait is a function function pwait() { while [ $(jobs -rp | wc -l) -ge $1 ] do # sleep 10 wait done } (see http://superuser.com/questions/158165/parallel-shell-loops for one example amongst many). I was hoping that using "wait" would be better than using a "sleep 10". But wait waits for them all and not just he last to finish. The nice thing is that this is a small, easy loop and all the brains is in the barrier function pwait. Sadly a sleep for 10 seconds is completely arbitrary. Anthony. -- Anthony R Fletcher Room 2033, Building 12A, http://dcb.cit.nih.gov/~arif National Institutes of Health, arif@mail.nih.gov 12A South Drive, Bethesda, Phone: (+1) 301 402 1741. MD 20892-5624, USA.