如何从子进程本身获取子进程的 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。