Answers:
使用$BASHPID
或$$
有关更多信息,包括两者之间的区别,请参见手册。
TL; DRTFM
$$
扩展为外壳的进程ID。
()
子外壳程序中,它将扩展为调用外壳程序的进程ID,而不是子外壳程序。$BASHPID
扩展为当前Bash进程的进程ID。
()
子shell中,它扩展为该子shell的进程ID$BASHPID
是BASH 4的新功能。如果您正在使用BASH 3.x,则必须使用$$
除了Jefromi引用的Advanced Bash脚本指南中给出的示例外,这些示例还显示了管道如何创建子外壳:
$ 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
stdin
)中。该字符串称为“此处字符串”。
PID存储在中$$
。
示例:kill -9 $$
将终止从其调用的shell实例。
kill -9
(带有-9
标志)被认为是有害的,仅在绝对必要时才使用)。
kill -9 $$
做恰好会做一件事。它终止了当前的shell进程。如果您在shell会话中做了不想写给.bash_history
Like的操作,这将非常有用:docker run -e PASSWORD=hunter2 ircbot
您可以使用该$$
变量。
如果该进程是子进程,并且未设置$ BASHPID,则可以查询正在运行的进程的已创建子进程的ppid。这可能有点难看,但可以。例:
sleep 1 &
mypid=$(ps -o ppid= -p "$!")