如何从子进程本身获取子进程的pid

如何从子进程本身获取子进程的pid

如何从子进程本身获取子进程的 pid?

  foo()
{
 echo pid=$$
 echo spid=$!
 echo bpid=$BASHPID
}

echo PARENT_PID=$$
foo &
wait

第一次运行时我得到:

PARENT_PID=17112
[1]     17512
pid=17112
spid=
bpid=

我期望看到 spid 17512

第二次运行时我得到一些奇怪的东西:

PARENT_PID=17112
[1]     17797
pid=17112
spid=17512 #why I see here pid of previous subprocess???
bpid=

我预计会看到 17797,但得到的是 17512!

所以有两个问题:1)如何从子进程内部获取子进程的pid(我将多次执行Foo并期望看到每个子进程的pid)?
2)为什么我在第二次运行时得到了意想不到的结果?

答案1

POSIX 标准定义$$始终是主 shell 的 pid。

如果在后台运行进程,则$!返回最后一个后台进程的 pid。

相关内容