How do you get the PID in bash?

January 27th, 2014
bash, tech
If you ask how to get the PID in bash someone will tell you:
The variable $$ contains the PID.
This is usually correct, but not always. Sometimes it can be incorrect, but in a way that's actually closer to what you wanted.

The basic problem is that many bash constructs run in a subshell. This means the shell will fork itself, running your function in a separate process. This allows simple concurrency, but it also means a new process id. For example:

    $ function a { echo $$; }
    $ function b { echo $BASHPID; }
Function a uses $$ while b uses $BASHPID. When run as normal functions they both give the PID of bash running them:
    $ a
    6042
    $ b
    6042
When run in the background, however, they diverge:
    $ a &
    6042
    $ b &
    14774
To run a function in the background bash uses a multiprocess model, forking a subshell for each one, so we should expect both a & and b & to give new PIDs. In order to make this process faster, though, and because POSIX says so, bash doesn't reinitialize itself when creating a subshell. This means $$, which was computed once when bash started, continues to have its original value. $BASHPID always looks up the current PID of the executing process, however, so it does change when you make a subshell.

While this definition of $$ is frustrating if you actually want to get the current process id, for example to let each background function have free reign of /tmp/PID, in many cases this definition is actually helpful. There are many simple constructs in bash that require subshells, and it's convenient that $$ stays consistent. For example:

    $ ls $SOME_PLACE | while read fname ; do
        some_command $fname >> /tmp/$$.output
      done
    $ other_command /tmp/$$.output
Because pipes run in a subshell if $$ were defined like $BASHPID all of these some_command outputs would build up in some random file in /tmp and other_command would look in a different file. Instead $$ happens to mean the right thing, and everything works.

Comment via: google plus, facebook, substack

Recent posts on blogs I like:

The One That I Want Another Sister

I want a baby sister or brother. Because I want to play with another kid, and I don't want to play with Josie because she is in preschool and I won't play with her very often. So I want to play with someone very often who is not just two people. …

via Nora Wise's Blog Posts September 5, 2026

Linkpost for September

On September 19 and 20, Sparrow Infrastructure is putting on The Overhang, a conference in Washington D.C.

via Thing of Things September 4, 2026

Ed Zitron's AI prediction track record

I was curious how well the predictions of the most widely cited AI skeptic I've seen (Ed Zitron) have done, so I looked at how his predictions panned out. To disclose my own biases, I've never had a particularly strong pro or anti AI progress posi…

via Posts on September 1, 2026

more     (via openring)