在我的shell脚本中,我写了:
#! /bin/bash
(ls;echo$$)
echo$$
然后我运行shell,两个输出是相同的
2592
2592
为什么subshell没有新的进程ID?
答案 0 :(得分:2)
$$
是主shell的进程ID。要获取子shell的进程ID,请使用BASHPID:
$ echo $$ $BASHPID; ( echo $$ $BASHPID; )
19610 19610
19610 21937
子shell有PID 21937。
来自man bash
:
BASHPID
扩展为当前bash进程的进程ID。这在某些情况下与$$不同,例如 不需要重新初始化bash的shell。
相比之下,$$
记录如下:
$$
扩展到shell的进程ID。在()子shell中,它会扩展 到当前shell的进程ID,而不是子shell。