我有Bash的问题,我不知道为什么。
在shell下,我input:
echo $$ ## print 2433 (echo $$) ## also print 2433 (./getpid) ## print 2602
“getpid”是获得当前pid的C程序,例如:
int main() { printf("%d", (int)getpid()); return 0; }
令我困惑的是:
你可以帮我吗?
$$
定义为返回子shell中父进程的进程ID; 从“特殊参数”下的手册页:
$扩展到shell的进程ID。 在()子shell中,它展开为当前shell的进程ID,而不是子shell。
在bash
4中,你可以用BASHPID
获得子进程的ID。
~ $ echo $$ 17601 ~ $ ( echo $$; echo $BASHPID ) 17601 17634
您可以使用下列之一。
$!
是最后一个后台进程的PID。 kill -0 $PID
检查它是否仍在运行。 $$
是当前shell的PID。 $$
是Bash中当前脚本PID的别名。 在这里查看$$
和$BASHPID
之间的差异 ,并在其上面添加包含嵌套级别的附加变量$BASH_SUBSHELL
。 如果你想让你的C程序打印你的shell的PID,试试getppid()
。