Linux/Unix Bash脚本如何知道自己的PID?

Deb*_*ger 127 bash scripting pid

我在Bash中调用了一个脚本Script.sh,它需要知道自己的PID(即我需要在Script.sh中获取PID)

知道怎么做吗?

Pau*_*lin 209

变量'$$'包含PID.


tva*_*son 53

$BASHPID$$

有关详细信息,请参阅手册,包括两者之间的差异.

TL; DRTFM

  • $$ 扩展到shell的进程ID.
    • ()子shell中,它扩展为调用shell的进程ID,而不是子shell.
  • $BASHPID 扩展到当前Bash进程的进程ID.
    • ()子shell中,它扩展为子shell的进程ID

  • 请注意,$$和BASHPID并不总是相同的 - 手册提到了这一点,这里有一个更具体的例子:http://tldp.org/LDP/abs/html/internalvariables.html.区别可能非常重要,因为许多bash结构确实在子shell中运行. (10认同)
  • 应该注意的是`$ BASHPID`是BASH 4的新功能.如果你使用的是BASH 3.x,你必须使用`$$` (2认同)

Pau*_*ce. 32

除了Jefromi引用的Advanced Bash Scripting Guide中给出的示例之外,这些示例还显示了管道如何创建子壳:

$ 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
Run Code Online (Sandbox Code Playgroud)

  • 它将字符串重定向到循环(或任何读取`stdin`)的内容.该字符串称为"here string". (4认同)

neo*_*neo 7

PID存储在$$.

示例:kill -9 $$将终止从中调用的shell实例.

  • 它被认为是"危险的",因为该过程没有机会响应信号(并且可能在自身后清理).做`kill -9 $$`只做一件事.它杀死**当前的shell进程**.如果你在shell会话中做了一些你不想写入`.bash_history`的东西,这很有用:`docker run -e PASSWORD = hunter2 ircbot` (2认同)

Kla*_*sen 6

您可以使用该$$变量。