如何从shell脚本中获取分叉的subprocess的进程ID(PID)

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

以下是我的代码:

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

但是,我怎样才能从我刚创build的每个subprocess获得pid?

谢谢。

Solutions Collecting From Web of "如何从shell脚本中获取分叉的subprocess的进程ID(PID)"

背景子进程的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 

从Bash手册 :

!

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

即使用$!