From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1042 invoked from network); 10 Jan 2005 16:54:58 -0000 Received: from news.dotsrc.org (HELO a.mx.sunsite.dk) (130.225.247.88) by ns1.primenet.com.au with SMTP; 10 Jan 2005 16:54:58 -0000 Received: (qmail 22967 invoked from network); 10 Jan 2005 16:54:48 -0000 Received: from sunsite.dk (130.225.247.90) by a.mx.sunsite.dk with SMTP; 10 Jan 2005 16:54:48 -0000 Received: (qmail 3492 invoked by alias); 10 Jan 2005 16:54:33 -0000 Mailing-List: contact zsh-workers-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 20663 Received: (qmail 3457 invoked from network); 10 Jan 2005 16:54:32 -0000 Received: from unknown (HELO a.mx.sunsite.dk) (130.225.247.88) by sunsite.dk with SMTP; 10 Jan 2005 16:54:32 -0000 Received: (qmail 19618 invoked from network); 10 Jan 2005 16:53:33 -0000 Received: from out003pub.verizon.net (HELO out003.verizon.net) (206.46.170.103) by a.mx.sunsite.dk with SMTP; 10 Jan 2005 16:53:29 -0000 Received: from candle.brasslantern.com ([4.11.10.129]) by out003.verizon.net (InterMail vM.5.01.06.06 201-253-122-130-106-20030910) with ESMTP id <20050110165327.BDH1106.out003.verizon.net@candle.brasslantern.com> for ; Mon, 10 Jan 2005 10:53:27 -0600 Received: from candle.brasslantern.com (IDENT:schaefer@localhost [127.0.0.1]) by candle.brasslantern.com (8.12.11/8.12.11) with ESMTP id j0AGrPPD026930 for ; Mon, 10 Jan 2005 08:53:26 -0800 Received: (from schaefer@localhost) by candle.brasslantern.com (8.12.11/8.12.11/Submit) id j0AGrPtt026929 for zsh-workers@sunsite.dk; Mon, 10 Jan 2005 08:53:25 -0800 From: Bart Schaefer Message-Id: <1050110165325.ZM26928@candle.brasslantern.com> Date: Mon, 10 Jan 2005 16:53:25 +0000 In-Reply-To: <20050110094918.GA4432@sc> Comments: In reply to Stephane Chazelas "Re: multios and unnecessary processes" (Jan 10, 9:49am) References: <20050109164753.GA4246@sc> <1050109203218.ZM22780@candle.brasslantern.com> <20050110094918.GA4432@sc> X-Mailer: Z-Mail (5.0.0 30July97) To: Zsh hackers list Subject: Re: multios and unnecessary processes MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Authentication-Info: Submitted using SMTP AUTH at out003.verizon.net from [4.11.10.129] at Mon, 10 Jan 2005 10:53:27 -0600 X-Spam-Checker-Version: SpamAssassin 2.63 on a.mx.sunsite.dk X-Spam-Level: * X-Spam-Status: No, hits=1.6 required=6.0 tests=RCVD_IN_NJABL,RCVD_IN_SORBS autolearn=no version=2.63 X-Spam-Hits: 1.6 On Jan 10, 9:49am, Stephane Chazelas wrote: } Subject: Re: multios and unnecessary processes } } > I don't know offhand why multios would behave differently when } > the shell is interactive. } [...] } } That's because of the -g option to lsof (process group $$, and } lsof is run in a different process group in interactive mode), Ah, I should have thought of that. } > The right way to write multios-independent code is to wrap things in } > curly braces, e.g.: { lsof -ag $$ -d0-2,10-15 >&2 } >&2 } } Thanks for the } } { { cmd 2>&1 >&3 3>&-; } | cmd2 3>&-; } 3>&- } } ~$ zsh -c '{ { lsof -ag $$ -d 0-2,10-15 2>&1 >&3 3>&-; } | tr a b 3>&-; } 3>&1' } But that's still one more process compared to: } } ~$ zsh -o nomultios -c '{ lsof -ag $$ -d 0-2,10-15 2>&1 >&3 3>&- | tr a b 3>&-; } 3>&1' If the number of processes spawned is important, you have to know when to use curly braces and when to force a subshell with parens. Curly braces imply that the parent zsh sticks around and waits, whereas a subshell with parens can simply do an exec. zsh -fc '{ ( lsof -ag $$ -d 0-2,10-15 2>&1 >&3 3>&-; ) | tr a b 3>&-; } 3>&1' COMMAND PID PGRP USER FD TYPE DEVICE SIZE NODE NAME tr 26811 26811 schaefer 0r FIFO 0,0 72995 pipe tr 26811 26811 schaefer 1u CHR 136,7 9 /dev/pts/7 tr 26811 26811 schaefer 2u CHR 136,7 9 /dev/pts/7 lsof 26822 26811 schaefer 0u CHR 136,7 9 /dev/pts/7 lsof 26822 26811 schaefer 1u CHR 136,7 9 /dev/pts/7 lsof 26822 26811 schaefer 2w FIFO 0,0 72995 pipe