如何从shell脚本中的forked子进程获取进程id(pid)

Sam*_*Sam 24 linux shell

我相信我可以从父进程分叉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
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Joh*_*ica 48

存储了后台子进程的PID $!.

fpfunction &
child_pid=$!
parent_pid=$$
Run Code Online (Sandbox Code Playgroud)

反过来,用于$PPID从子进程获取父进程的PID.

fpfunction() {
    local child_pid=$$
    local parent_pid=$PPID
    ...
}
Run Code Online (Sandbox Code Playgroud)

另外,对于它的价值,你可以将循环语句组合成一个类似C的for循环:

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


Oli*_*rth 9

Bash手册:

!

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

即,使用$!.