Date: Fri, 25 Mar 2022 12:13:27 -0700 From: Bryan Drewery <bdrewery@FreeBSD.org> To: Ganael Laplanche <ganael.laplanche@martymac.org>, freebsd-hackers@freebsd.org Subject: Re: Our /bin/sh and process group IDs Message-ID: <243ebc92-26a1-e5e7-67fe-1477ed6b5f7a@FreeBSD.org> In-Reply-To: <48e49ad0-a12a-d10b-5867-da9736c6c1fd@martymac.org> References: <48e49ad0-a12a-d10b-5867-da9736c6c1fd@martymac.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 3/24/2022 10:13 AM, Ganael Laplanche wrote: > Hello, > > I am trying to fork a sub-shell with its own process group id through a > function that must itself be executed in the background. > > It should work with the following code: > > #---- > #!/bin/sh > > # Parent shell IDs > ps -o pid,ppid,pgid,comm -p $$ > > test_func () { > set -m > { /bin/sh -c 'sleep 1' ; } & > # Forked shell IDs (pgid should be different from parent, > # but it is not) > ps -o pid,ppid,pgid,comm -p $! set -m needs to be set from the parent process, not child. In this example test_func is a child *and* the sleep is a child which is also very racy. Here's a pattern I use that works: #! /bin/sh ps -o pid,ppid,pgid,comm -p $$ test_func() { mypid=$(sh -c 'echo $PPID') ps -o pid,ppid,pgid,comm -p $mypid } spawn() { local - # cause -m to revert back on return set -m "$@" & } spawn test_func ps -o pid,ppid,pgid,comm -p $! > } > > # The following does not work: > test_func & > # ...but it works when function is not executed in the background: > #test_func > > sleep 2 > exit 0 > #---- > > Unfortunately, with our /bin/sh, the sleeping process gets the *same* > process group ID as its parent. > > I've tested several shell implementations; it works with : > > /usr/local/bin/bash --posix 'test.sh' # from bash-5.1.16 > /usr/local/bin/zsh --emulate sh 'test.sh' # from zsh-5.8.1 > /usr/local/bin/ksh93 'test.sh' # from ksh93-devel-2020.06.30 > /usr/local/bin/mksh 'test.sh' # from mksh-59c > /usr/local/bin/ksh 'test.sh' # from pdksh-5.2.14p2_6 > > but not with : > > /bin/sh 'test.sh' # on 13.0-RELEASE-p8 > /usr/local/bin/dash 'test.sh' # from dash-0.5.11.5 > > am I missing something ? > > Any help welcome :) > > Best regards, > -- Bryan Drewery
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?243ebc92-26a1-e5e7-67fe-1477ed6b5f7a>