NetBSD Problem Report #35055
From www@NetBSD.org Wed Nov 15 03:55:12 2006
Return-Path: <www@NetBSD.org>
Received: by narn.NetBSD.org (Postfix, from userid 31301)
id 4D0AD63B400; Wed, 15 Nov 2006 03:55:12 +0000 (UTC)
Message-Id: <20061115035512.4D0AD63B400@narn.NetBSD.org>
Date: Wed, 15 Nov 2006 03:55:12 +0000 (UTC)
From: keiji@hiemalis.org
Reply-To: keiji@hiemalis.org
To: gnats-bugs@NetBSD.org
Subject: /bin/sh wait bug
X-Send-Pr-Version: www-1.0
>Number: 35055
>Category: bin
>Synopsis: /bin/sh wait bug
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: bin-bug-people
>State: closed
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Wed Nov 15 04:00:00 +0000 2006
>Closed-Date: Sun Dec 21 00:24:51 +0000 2008
>Last-Modified: Sun Dec 21 00:24:51 +0000 2008
>Originator: Wada Keiji
>Release: 3.99.15
>Organization:
>Environment:
NetBSD poker 3.99.15 NetBSD 3.99.15 (POKER-PCMCIA) #6: Sat Dec 31 03:03:42 JST 2005 root@poker:/home/NetBSD/src/sys/arch/i386/compile/POKER-PCMCIA i386
>Description:
please exec sh program
-----
#!/bin/sh
#!/emul/freebsd/bin/sh
sleep 3 &
sleep 1 &
wait %1
r1=$?
echo $r1
wait %2
r2=$?
echo $r2
-----
Both r1 and r2 should be 0.
But exec this sh program, r1 is 0, r2 is 127.
>How-To-Repeat:
exec sh program
#!/bin/sh
#!/emul/freebsd/bin/sh
sleep 3 &
sleep 1 &
wait %1
r1=$?
echo $r1
wait %2
r2=$?
echo $r2
>Fix:
>Release-Note:
>Audit-Trail:
From: dieter roelants <dieter.r@pandora.be>
To: gnats-bugs@NetBSD.org
Cc: keiji@hiemalis.org
Subject: Re: bin/35055: /bin/sh wait bug
Date: Sat, 25 Nov 2006 23:08:58 +0100
> #!/bin/sh
> #!/emul/freebsd/bin/sh
> sleep 3 &
> sleep 1 &
>
> wait %1
> r1=$?
> echo $r1
> wait %2
> r2=$?
> echo $r2
> -----
> Both r1 and r2 should be 0.
Why do you think so? By the time the first wait returns, the second sleep has finished and so you don't have a job 2 anymore. 127 is the return value wait gives when you specify a non-existing child.
> But exec this sh program, r1 is 0, r2 is 127.
Seems right to me...
Kind regards
dieter
From: Wada Keiji <keiji@hiemalis.org>
To: gnats-bugs@NetBSD.org, dieter.r@pandora.be
Cc: keiji@hiemalis.org
Subject: Re: bin/35055: /bin/sh wait bug
Date: Sun, 26 Nov 2006 16:25:08 +0900 (JST)
>>>>> On Sat, 25 Nov 2006 22:10:03 +0000 (UTC)
>>>>> dieter.r@pandora.be(dieter roelants) said:
dieter.r> The following reply was made to PR bin/35055; it has been noted by GNATS.
dieter.r> From: dieter roelants <dieter.r@pandora.be>
dieter.r> To: gnats-bugs@NetBSD.org
dieter.r> Cc: keiji@hiemalis.org
dieter.r> Subject: Re: bin/35055: /bin/sh wait bug
dieter.r> Date: Sat, 25 Nov 2006 23:08:58 +0100
dieter.r> > #!/bin/sh
dieter.r> > #!/emul/freebsd/bin/sh
dieter.r> > sleep 3 &
dieter.r> > sleep 1 &
dieter.r> >
dieter.r> > wait %1
dieter.r> > r1=$?
dieter.r> > echo $r1
dieter.r> > wait %2
dieter.r> > r2=$?
dieter.r> > echo $r2
dieter.r> > -----
dieter.r> > Both r1 and r2 should be 0.
dieter.r> Why do you think so? By the time the first wait returns,
dieter.r> the second sleep has finished and so you don't have a job 2
dieter.r> anymore. 127 is the return value wait gives when you specify
dieter.r> a non-existing child.
I want to get second sleep(job) return value. But NetBSD's sh can't.
FreeBSD's sh and zsh give me second sleep(job) return value.
dieter.r> > But exec this sh program, r1 is 0, r2 is 127.
dieter.r> Seems right to me...
I don't know what is right. But this sh program action is different
between NetBSD and FreeBSD.
Thanks.
From: David Laight <david@l8s.co.uk>
To: gnats-bugs@NetBSD.org
Cc:
Subject: Re: bin/35055: /bin/sh wait bug
Date: Sun, 26 Nov 2006 18:52:29 +0000
On Sun, Nov 26, 2006 at 07:30:03AM +0000, Wada Keiji wrote:
>
> dieter.r> > #!/bin/sh
> dieter.r> > #!/emul/freebsd/bin/sh
> dieter.r> > sleep 3 &
> dieter.r> > sleep 1 &
> dieter.r> >
> dieter.r> > wait %1
> dieter.r> > r1=$?
> dieter.r> > echo $r1
> dieter.r> > wait %2
> dieter.r> > r2=$?
> dieter.r> > echo $r2
> dieter.r> > -----
> dieter.r> > Both r1 and r2 should be 0.
>
> dieter.r> Why do you think so? By the time the first wait returns,
> dieter.r> the second sleep has finished and so you don't have a job 2
> dieter.r> anymore. 127 is the return value wait gives when you specify
> dieter.r> a non-existing child.
I've just read the SUS spec
http://www.opengroup.org/onlinepubs/009695399/utilities/wait.html
It states: This volume of IEEE Std 1003.1-2001 requires the implementation
to keep the status of terminated jobs available until the status is requested
David
--
David Laight: david@l8s.co.uk
From: Christos Zoulas <christos@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/35055 CVS commit: src/bin/sh
Date: Sun, 21 Dec 2008 00:19:59 +0000 (UTC)
Module Name: src
Committed By: christos
Date: Sun Dec 21 00:19:59 UTC 2008
Modified Files:
src/bin/sh: jobs.c
Log Message:
PR/35055: Wada Keiji: wait did not keep the status of terminated jobs as
expected.
To generate a diff of this commit:
cvs rdiff -r1.66 -r1.67 src/bin/sh/jobs.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
State-Changed-From-To: open->closed
State-Changed-By: christos@NetBSD.org
State-Changed-When: Sat, 20 Dec 2008 19:24:51 -0500
State-Changed-Why:
fixed, thanks
>Unformatted:
(Contact us)
$NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2007
The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.