得到shell(bash)中的pid
 我有Bash的问题,我不知道为什么。 
 在shell下,我input: 
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是不同的,是不是?
- “$$”就像macros?
你可以帮我吗?
  $$定义为返回子shell中父进程的进程ID; 从“特殊参数”下的手册页: 
$扩展到shell的进程ID。 在()子shell中,它展开为当前shell的进程ID,而不是子shell。
 在bash 4中,你可以用BASHPID获得subprocess的ID。 
 ~ $ echo $$ 17601 ~ $ ( echo $$; echo $BASHPID ) 17601 17634 
您可以使用下列之一。
-  $!是最后一个后台进程的PID。
-   kill -0 $PID检查它是否仍在运行。
-   $$是当前shell的PID。
- 圆括号在Bash中调用子shell 。 由于它只是一个子shell,它可能有相同的PID – 取决于实现。
- 你调用的C程序是一个独立的进程,它有自己独特的PID – 不pipe它是否在一个子shell中。
-   $$是Bash中当前脚本PID的别名。 在这里查看$$和$BASHPID之间的差异 ,并在其上面添加包含嵌套级别的附加variables$BASH_SUBSHELL。
 如果你想让你的C程序打印你的shell的PID,试试getppid() 。