2010-03-22 82 views

回答

172

变量'$$'包含PID。

38

使用$BASHPID$$

更多信息,请参见manual,包括两者之间的差异。

+10

请注意,$$和BASHPID并不总是同样的事情 - 手动提到这里有一个更具体的例子:http:区别可能非常重要,因为许多bash构造都在子壳中运行。 – Cascabel 2010-03-22 16:00:07

+0

@Jefromi - 指出。这是我与手册相关的原因之一。 – tvanfosson 2010-03-22 16:14:42

+0

需要注意的是'BASHPID'是BASH 4的新增功能。如果您使用的是BASH 3.x,则必须使用'$$' – 2017-10-19 03:59:22

2

您可以使用$$变量。

5

PID存储在$$。例如:kill -9 $$将终止它从中调用的shell实例。

+0

'kill -9'(带有“-9”标志)被认为是是有害的,只有在绝对必要时才能使用)。 – 2015-09-15 15:01:34

+0

它被认为是“危险的”,因为这个过程没有机会对信号作出反应(并且可能在自身之后进行清理)。做'kill -9 $$'只会做1件事。它杀死了**当前的shell进程**。如果你在shell会话中做了一些你不想写入'.bash_history'的东西,这很有用。例如:'docker run -e PASSWORD = hunter2 ircbot' – 2017-10-19 04:05:26

25

除了通过Jefromi引用的Advanced Bash Scripting Guide给出的例子,这些例子表明管道如何创建子shell:

$ echo $$ $BASHPID | cat - 
11656 31528 
$ echo $$ $BASHPID 
11656 11656 
$ echo $$ | while read line; do echo $line $$ $BASHPID; done 
11656 11656 31497 
$ while read line; do echo $line $$ $BASHPID; done <<< $$ 
11656 11656 11656 
+0

你能解释一下“<<<”是什么意思?谢谢。 – 2014-03-29 20:27:14

+3

它将一个字符串重定向到循环中(或读取“stdin”的任何内容)。该字符串被称为“这里字符串”。 – 2014-03-29 21:29:57