Special shell parameters — process ID of the current shell In POSIX/Bourne-compatible shells, which special parameter expands to the process number (PID) of the current shell instance?
-
A$!
-
C$0
-
D$*
-
ENone of the above
Answer
Correct Answer:
Explanation
Introduction / Context:Shell scripting often needs the process ID (PID) to create unique filenames, manage lock files, or send signals. POSIX shells provide built-in special parameters that expand to useful values without invoking external commands.
Given Data / Assumptions:
- Shell is POSIX/Bourne-compatible (sh, bash, ksh, dash).
- We need the PID of the current shell process.
- We are not asking for PIDs of background jobs or parent processes.
Concept / Approach:
The special parameter expands to the PID of the current shell. Other related parameters include $! (PID of the most recently executed background pipeline), $0 (name of the shell or script), and $* (all positional parameters).
Step-by-Step Solution:
Echo the parameter:echo to see the PID.Use it in filenames: tmpfile=/tmp/app.
toavoidcollisions.ps−p
toavoidcollisions.ps−p to see the matching process.Remember $! is different (last background job PID).Verification / Alternative check:
In an interactive shell, compare echo
withthePIDreportedbypsforyourshellprocess.Insideasubshell,observethat
withthePIDreportedbypsforyourshellprocess.Insideasubshell,observethat can change because it refers to that subshell's PID.
Why Other Options Are Wrong:
- $!: PID of the most recent background job, not the current shell.
- $0: script or shell name, not a PID.
- $*: all positional parameters as a single word.
- None of the above: incorrect because
iscorrect.
CommonPitfalls:
Using
iscorrect.
CommonPitfalls:
Using inside subshells without realizing it changes; confusing $! and
;forgettingtoquotewhenembeddinginpathswithothervariables.
FinalAnswer:
;forgettingtoquotewhenembeddinginpathswithothervariables.
FinalAnswer: