如何在Shell脚本中从派生的子进程获取PID

问题描述 投票:24回答:2

我相信我可以从父进程中派生10个子进程。

下面是我的代码:

#/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

但是,如何从刚刚创建的每个子进程中获取pid?

linux shell pid
2个回答
49
投票

后台子进程的PID存储在$!中。

fpfunction &
child_pid=$!
parent_pid=$$

反之,请使用$PPID从子级获取父进程的PID。

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

还有它的价值,您可以将循环语句组合成单个类似于C的for循环:

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

9
投票

Bash manual

!

扩展为最近执行的后台(异步)命令的进程ID。

即,使用$!

© www.soinside.com 2019 - 2024. All rights reserved.