mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
Add ${.sh.pid} as an alternative to $BASHPID (#109)
This variable is like Bash's $BASHPID, but in virtual subshells
it will retain its previous value as virtual subshells don't fork.
Both $BASHPID and ${.sh.pid} are different from $$ as the latter
is only set to the parent shell's process ID (i.e. it isn't set
to the process ID of the current subshell).
src/cmd/ksh93/include/defs.h:
- Add 'current_pid' for storing the current process ID at a valid
memory address.
- Change 'ppid' from 'int32_t' to 'pid_t', as the return value from
'getppid' is of the 'pid_t' data type.
src/cmd/ksh93/data/variables.c,
src/cmd/ksh93/include/variables.h,
src/cmd/ksh93/sh/init.c,
src/cmd/ksh93/sh/xec.c:
- Add the ${.sh.pid} variable as an alternative to $BASHPID.
The process ID is stored in a struct before ${.sh.pid} is set
as environment variables are pointers that must point to a
valid memory address. ${.sh.pid} is updated by the _sh_fork()
function, which is called when ksh forks a new process with
sh_fork() or sh_ntfork().
src/cmd/ksh93/tests/variables.sh:
- Add ${.sh.pid} to the list of special variables and add three
regression tests for ${.sh.pid}.
src/cmd/ksh93/tests/subshell.sh:
- Update the PATH forking regression test to use ${.sh.pid} and
remove the TODO note.
This commit is contained in:
parent
f9fdbfc9e9
commit
9de65210c6
9 changed files with 45 additions and 7 deletions
|
|
@ -2917,6 +2917,9 @@ pid_t _sh_fork(Shell_t *shp,register pid_t parent,int flags,int *jobid)
|
|||
sh_onstate(SH_NOLOG);
|
||||
if (shp->fn_reset)
|
||||
shp->fn_depth = shp->fn_reset = 0;
|
||||
/* Set ${.sh.pid} to the child process ID */
|
||||
shp->gd->current_pid = getpid();
|
||||
SH_PIDNOD->nvalue.lp = &shp->gd->current_pid;
|
||||
#if SHOPT_ACCT
|
||||
sh_accsusp();
|
||||
#endif /* SHOPT_ACCT */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue