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_historyLike的操作,这将非常有用:docker run -e PASSWORD=hunter2 ircbot
您可以使用该$$变量。
如果该进程是子进程,并且未设置$ BASHPID,则可以查询正在运行的进程的已创建子进程的ppid。这可能有点难看,但可以。例:
sleep 1 &
mypid=$(ps -o ppid= -p "$!")