From owner-freebsd-current@FreeBSD.ORG Wed Jun 25 00:41:27 2003 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 78DBE37B401; Wed, 25 Jun 2003 00:41:27 -0700 (PDT) Received: from mail.cyberonic.com (mail.cyberonic.com [4.17.179.4]) by mx1.FreeBSD.org (Postfix) with ESMTP id 5299343FEA; Wed, 25 Jun 2003 00:41:26 -0700 (PDT) (envelope-from jmg@hydrogen.funkthat.com) Received: from hydrogen.funkthat.com (node-40244c0a.sfo.onnet.us.uu.net [64.36.76.10]) by mail.cyberonic.com (8.12.8/8.12.5) with ESMTP id h5P7gKMo031984; Wed, 25 Jun 2003 03:42:21 -0400 Received: (from jmg@localhost) by hydrogen.funkthat.com (8.12.9/8.11.6) id h5P7fpNJ021540; Wed, 25 Jun 2003 00:41:51 -0700 (PDT) (envelope-from jmg) Date: Wed, 25 Jun 2003 00:41:51 -0700 From: John-Mark Gurney To: Juli Mallett , "Tim J. Robbins" , freebsd-current@freebsd.org, Andrey Chernov Message-ID: <20030625074151.GY57612@funkthat.com> Mail-Followup-To: Juli Mallett , "Tim J. Robbins" , freebsd-current@freebsd.org, Andrey Chernov References: <20030624183515.A42570@FreeBSD.org> <1056499632.662.7.camel@timon.nist> <3EF922BE.4070803@acm.org> <20030624234707.A59666@FreeBSD.org> <20030625001525.A60867@FreeBSD.org> <20030625060450.GX57612@funkthat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030625060450.GX57612@funkthat.com> User-Agent: Mutt/1.4.1i X-Operating-System: FreeBSD 4.2-RELEASE i386 X-PGP-Fingerprint: B7 EC EF F8 AE ED A7 31 96 7A 22 B3 D8 56 36 F4 X-Files: The truth is out there X-URL: http://resnet.uoregon.edu/~gurney_j/ X-Resume: http://resnet.uoregon.edu/~gurney_j/resume.html Subject: Re: tcsh being dodgy, or pipe code ishoos? X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: John-Mark Gurney List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Jun 2003 07:41:27 -0000 John-Mark Gurney wrote this message on Tue, Jun 24, 2003 at 23:04 -0700: > Ok, I seem to have found out that we are reaping a child that we don't > know about. slightly modified xargs produces this: ok, with some magic ktrace work, I have come up with an more complete answer to the riddle. It's how the shell exec's the processes. The bare cause can be demo'd by: > ( ( echo 2 ; echo 3 ) | ./xargs -I% echo + % ) Say the shell you run the above command is 10. It will fork to create a shell to run the commands in the outter parens. Call this 11. 11's job is to run: (echo 2; echo 3) | ./xargs -I% echo +% 11 will fork/exec and run: echo 2; echo 3 creating process 12. 11 will see that there is no additional commands after ./xargs, and exec (not fork) xargs. Since 12 is stil around and a child of 11, when it exits, 11 will reap 12, and thinking that the first proccess has exited, run the second echo command. Due to scheduling, we'll have two processes running at the same time which can cause the interleaving of data. So, now the question is, do we fix xargs to deal with unexpected children? Or fix the shells in question? (tcsh and zsh seem to suffer this problem) To me, fixing xargs is correct since it prevents another possible future abusers of this "feature". -- John-Mark Gurney Voice: +1 415 225 5579 "All that I will do, has been done, All that I have, has not."