From owner-freebsd-bugs@freebsd.org Thu Nov 19 03:41:45 2020 Return-Path: Delivered-To: freebsd-bugs@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 5805547DF2B for ; Thu, 19 Nov 2020 03:41:45 +0000 (UTC) (envelope-from bugzilla-noreply@freebsd.org) Received: from mailman.nyi.freebsd.org (mailman.nyi.freebsd.org [IPv6:2610:1c1:1:606c::50:13]) by mx1.freebsd.org (Postfix) with ESMTP id 4Cc5891sqtz3P02 for ; Thu, 19 Nov 2020 03:41:45 +0000 (UTC) (envelope-from bugzilla-noreply@freebsd.org) Received: by mailman.nyi.freebsd.org (Postfix) id 4023647DE4E; Thu, 19 Nov 2020 03:41:45 +0000 (UTC) Delivered-To: bugs@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 3FE9647E28F for ; Thu, 19 Nov 2020 03:41:45 +0000 (UTC) (envelope-from bugzilla-noreply@freebsd.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Cc5891Gyvz3P94 for ; Thu, 19 Nov 2020 03:41:45 +0000 (UTC) (envelope-from bugzilla-noreply@freebsd.org) Received: from kenobi.freebsd.org (kenobi.freebsd.org [IPv6:2610:1c1:1:606c::50:1d]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1EF131D4F4 for ; Thu, 19 Nov 2020 03:41:45 +0000 (UTC) (envelope-from bugzilla-noreply@freebsd.org) Received: from kenobi.freebsd.org ([127.0.1.5]) by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id 0AJ3fjcI062497 for ; Thu, 19 Nov 2020 03:41:45 GMT (envelope-from bugzilla-noreply@freebsd.org) Received: (from www@localhost) by kenobi.freebsd.org (8.15.2/8.15.2/Submit) id 0AJ3fjDs062496 for bugs@FreeBSD.org; Thu, 19 Nov 2020 03:41:45 GMT (envelope-from bugzilla-noreply@freebsd.org) X-Authentication-Warning: kenobi.freebsd.org: www set sender to bugzilla-noreply@freebsd.org using -f From: bugzilla-noreply@freebsd.org To: bugs@FreeBSD.org Subject: [Bug 251227] setpgid sometimes returns ESRCH instead of EACCES Date: Thu, 19 Nov 2020 03:41:45 +0000 X-Bugzilla-Reason: AssignedTo X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: Base System X-Bugzilla-Component: kern X-Bugzilla-Version: CURRENT X-Bugzilla-Keywords: X-Bugzilla-Severity: Affects Many People X-Bugzilla-Who: mqudsi@neosmart.net X-Bugzilla-Status: New X-Bugzilla-Resolution: X-Bugzilla-Priority: --- X-Bugzilla-Assigned-To: bugs@FreeBSD.org X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 19 Nov 2020 03:41:45 -0000 https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D251227 --- Comment #5 from Mahmoud Al-Qudsi --- Thanks for bringing my attention to the approach taken by sh - it made me realize what I'd missed. So you're right, there's no broken job control her= e. This is a real issue: > [..] prevents a subsequent process in the same job from getting access to= a > shell that was assigned over to the newly minted pgrp that now contains o= nly > zombies but it doesn't apply to FreeBSD, which is why sh can get away with ignoring= any setpgid failures. (Interestingly, tcsh handles this situation by swapping p= grps in the middle of a single job invocation.) It turns out that while FreeBSD does not consider zombie processes as valid targets of a setpgid(2) call, it *does* keep their pgrp around and permits other processes to join the pgrp even if it only contains zombies. While the original issue persists and setpgid(zombie_pid, zombie_pid) calls fail with ESRCH instead of the expected EACCES, as you say, this is trivially handled if you have any degree of confidence that you are specifying a target proce= ss that is or was a valid child pid from the same session... and (more tenuous= ly) assuming you know this is the behavior on at least some of the platforms you are targeting. It's not the end of the world by any means, but I would argue that the consideration of zombie child processes should be an everywhere or nowhere = at all type of thing (and this is where my assumption of broken job control ca= me from). e.g. Linux considers zombie processes in setpgid calls (only to determine the error code) and lets new processes join pgrps that contain only zombies, whereas some kernels (e.g. WSLv1 up until recently) don't consider zombies = at all and reclaim pgrps as soon as the last process in it exits (before it's reaped). That aside, I'm assuming we can all agree it would be great for the man pag= es to clarify the behavior when it comes to zombie procs. Are you open to a patch? Thanks! --=20 You are receiving this mail because: You are the assignee for the bug.=