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

Linux/Unix Bash脚本如何知道自己的PID?,bash,scripting,pid,Bash,Scripting,Pid,我在Bash中有一个名为script.sh的脚本,它需要知道自己的PID(即,我需要在script.sh中获取PID) 你知道怎么做吗?使用$BASHPID或$ 有关更多信息,包括两者之间的差异,请参见[手册][1] TL;DRTFM $$扩展到shell的进程ID。 在()子shell中,它扩展到调用shell的进程ID,而不是子shell $BASHPID扩展到当前Bash进程的进程ID(bash4新增)。 在()子shell中,它扩展到子shell的进程ID [1] : 变量

我在Bash中有一个名为
script.sh
的脚本,它需要知道自己的PID(即,我需要在script.sh中获取PID)


你知道怎么做吗?

使用
$BASHPID
$

有关更多信息,包括两者之间的差异,请参见[手册][1]

TL;DRTFM

  • $$
    扩展到shell的进程ID。
    • ()
      子shell中,它扩展到调用shell的进程ID,而不是子shell
  • $BASHPID
    扩展到当前Bash进程的进程ID(bash4新增)。
    • ()
      子shell中,它扩展到子shell的进程ID [1] :

变量
$
包含PID。

您可以使用
$
变量。

PID存储在
$


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

除了在引用的Jefromi中给出的示例外,这些示例显示管道如何创建子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
$echo$$$BASHPID | cat-
11656 31528
$echo$$$BASHPID
11656 11656
$echo$$|读取行时;执行echo$line$$$BASHPID;完成
11656 11656 31497

$whilereadline;执行echo$line$$$BASHPID;done如果进程是子进程且未设置$BASHPID,则可以查询正在运行的进程的已创建子进程的ppid。这可能有点难看,但它是有效的。例如:

sleep 1 &
mypid=$(ps -o ppid= -p "$!")

请您解释一下“它将字符串重定向到循环中(或任何读取
stdin
)的内容。该字符串被称为“此处字符串”。
kill-9
(带有
-9
标志)被认为是有害的,只有在绝对必要时才使用)。它被认为是“危险的”“因为该过程没有机会对信号做出响应(并且可能在其自身之后进行清理)。执行
kill-9$$
只做一件事。它会终止当前的shell进程。如果您在shell会话中做了一些不想写入
.bash_history
的事情,例如:
docker run-e PASSWORD=hunter2 ircbot