我对Bash有问题,我也不知道为什么。
在shell下,我输入:
echo $$ ## print 2433
(echo $$) ## also print 2433
(./getpid) ## print 2602
“ getpid”是获取当前pid的C程序,例如:
int main() { printf("%d", (int)getpid()); return 0; }
让我感到困惑的是:
- 我认为“(命令)”是一个子进程(对吗?),我认为其pid应该与其父pid不同,但是它们是相同的,为什么...
- 当我使用程序在括号之间显示pid时,显示的pid不同,对吗?
- 是“ $$”之类的宏吗?
你能帮助我吗?
@Marian
—
本
echo $$ $BASHPID ; ( echo $$ $BASHPID )
证明了。圆括号创建一个子壳。这些语句可能会更改变量值,并且父外壳程序不得看到这些更改。这被实现为fork()
操作。
getpid
即使未在子Shell中运行,也会显示不同的进程ID。