How to get PID from forked child process in shell script

52,949

Solution 1

The PID of a backgrounded child process is stored in $!.

fpfunction &
child_pid=$!
parent_pid=$$

For the reverse, use $PPID to get the parent process's PID from the child.

fpfunction() {
    local child_pid=$$
    local parent_pid=$PPID
    ...
}

Also for what it's worth, you can combine the looping statements into a single C-like for loop:

for ((n = 1; n < 20; ++n)); do
do
    echo "Hello World-- $n times"
    sleep 2
    echo "Hello World2-- $n times"
done

Solution 2

From the Bash manual:

!

Expands to the process ID of the most recently executed background (asynchronous) command.

i.e., use $!.

Share:
52,949
Sam
Author by

Sam

Updated on December 15, 2020

Comments

  • Sam
    Sam over 3 years

    I believe I can fork 10 child processes from a parent process.

    Below is my code:

    #/bin/sh
    fpfunction(){
        n=1
        while (($n<20))
        do
            echo "Hello World-- $n times"
            sleep 2
            echo "Hello World2-- $n times"
            n=$(( n+1 ))
        done
    }
    
    fork(){
        count=0
        while (($count<=10))
        do
            fpfunction &
            count=$(( count+1 ))
        done
    }
    
    fork
    

    However, how can I get the pid from each child process I just created?