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
|
@ -122,7 +122,8 @@ struct shared
|
|||
gid_t groupid;
|
||||
gid_t egroupid;
|
||||
pid_t pid;
|
||||
int32_t ppid;
|
||||
pid_t ppid;
|
||||
pid_t current_pid; /* pid of the current ksh instance */
|
||||
unsigned char sigruntime[2];
|
||||
Namval_t *bltin_nodes;
|
||||
Namval_t *bltin_cmds;
|
||||
|
|
|
@ -90,6 +90,7 @@
|
|||
#define SH_STATS (shgd->bltin_nodes+60)
|
||||
#define SH_MATHNOD (shgd->bltin_nodes+61)
|
||||
#define SH_JOBPOOL (shgd->bltin_nodes+62)
|
||||
#define SHLVL (shgd->bltin_nodes+63)
|
||||
#define SH_PIDNOD (shgd->bltin_nodes+63)
|
||||
#define SHLVL (shgd->bltin_nodes+64)
|
||||
|
||||
#endif /* SH_VALNOD */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue