Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: $PPID not updated when the PPID changes (parent killed)
- X-seq: zsh-workers 48888
- From: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- To: Zsh hackers list <zsh-workers@xxxxxxx>
- Subject: Re: $PPID not updated when the PPID changes (parent killed)
- Date: Tue, 18 May 2021 21:25:07 -0700
- Archived-at: <https://zsh.org/workers/48888>
- In-reply-to: <CAH+w=7Y449A49SpWUvRfGQ0_0njfAy9KR=NGKKhL+Eh3ats1Gw@mail.gmail.com>
- List-id: <zsh-workers.zsh.org>
- References: <20210516152418.GA39669@zira.vinc17.org> <CAH+w=7a3y6MjrPQWnPc1O0ESroLesZXwaQ-_AxJB5XRk7xDj2Q@mail.gmail.com> <20210517202608.GA3255290@zira.vinc17.org> <CAH+w=7bhsp71vazSJ_9Un1btb4mrxBgUciUg4zfGv15LeUfT1g@mail.gmail.com> <YKLttAsFd4bl9waS@fullerene.field.pennock-tech.net> <CAH+w=7bywj1X1fyPLgpmo_OoqBEN8PjEDxDeKP-tMR_O4g04tg@mail.gmail.com> <20210518081520.GA3332066@zira.vinc17.org> <CAH+w=7Y449A49SpWUvRfGQ0_0njfAy9KR=NGKKhL+Eh3ats1Gw@mail.gmail.com>
On Tue, May 18, 2021 at 7:53 AM Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx> wrote
>
> PPID is not a special variable.
Well, I have to take that back; it IS documented as special, but only
because it's readonly (which it also is in e.g. bash).
Anyway, as per Stephane Chazelas,
> POSIX specification of sh says:
>
> > Set by the shell to the decimal value of its parent process ID
> > during initialization of the shell
>
> [...] it would be more useful if
> $PPID reported the realtime value of the parent pid, but no
> other shell does it and that would break POSIX compliance, and we
> already have sysparam[ppid] as already noted.
POSIX doesn't say whether it should be readonly, as far as I can tell.
It is not readonly when bash is invoked as "sh" but remains readonly
in zsh's sh emulation, which might be considered a bug.
So ... hopefully the attached patch addresses the assorted issues raised.
diff --git a/Doc/Zsh/params.yo b/Doc/Zsh/params.yo
index dc28a45ae..b514eb072 100644
--- a/Doc/Zsh/params.yo
+++ b/Doc/Zsh/params.yo
@@ -654,10 +654,11 @@ Same as tt(#).
)
vindex($)
item(tt($) <S>)(
-The process ID of this shell. Note that this indicates the original
-shell started by invoking tt(zsh); all processes forked from the shells
-without executing a new program, such as subshells started by
-tt(LPAR())var(...)tt(RPAR()), substitute the same value.
+The process ID of this shell, set when the shell initializes. Processes
+forked from the shell without executing a new program, such as command
+substitutions and commands grouped with tt(LPAR())var(...)tt(RPAR()),
+are subshells that duplicate the current shell, and thus substitute the
+same value for tt($$) as their parent shell.
)
vindex(-)
item(tt(-) <S>)(
@@ -817,9 +818,9 @@ The operating system, as determined at compile time.
)
vindex(PPID)
item(tt(PPID) <S>)(
-The process ID of the parent of the shell. As for tt($$), the
-value indicates the parent of the original shell and does not
-change in subshells.
+The process ID of the parent of the shell, set when the shell initializes.
+As with tt($$), the value does not change in subshells created as a
+duplicate of the current shell.
)
vindex(PWD)
item(tt(PWD))(
diff --git a/Test/E03posix.ztst b/Test/E03posix.ztst
index 7db4c0c84..564afac29 100644
--- a/Test/E03posix.ztst
+++ b/Test/E03posix.ztst
@@ -161,3 +161,6 @@ F:POSIX has neither math functions nor floating point
0f:Width of %s is computed in bytes not characters
F:This is considered a bugfix in zsh
>< Stéphane>
+
+ PPID=foo
+-f:PPID is not a readonly variable
diff --git a/Doc/Zsh/mod_system.yo b/Doc/Zsh/mod_system.yo
index 8f525c576..399b6fe03 100644
--- a/Doc/Zsh/mod_system.yo
+++ b/Doc/Zsh/mod_system.yo
@@ -263,9 +263,9 @@ tt($$), which returns the process ID of the main shell process.
)
item(tt(ppid))(
vindex(ppid, sysparams)
-Returns the process ID of the parent of the current process, even in
-subshells. Compare tt($PPID), which returns the process ID of the parent
-of the main shell process.
+Returns the current process ID of the parent of the current process, even
+in subshells. Compare tt($PPID), which returns the process ID of the
+initial parent of the main shell process.
)
item(tt(procsubstpid))(
Returns the process ID of the last process started for process
Messages sorted by:
Reverse Date,
Date,
Thread,
Author