Answers:
$!
确保为您提供Shell执行该tail
命令的过程的pid 。外壳程序是单线程的,每个外壳程序都有自己的变量集,位于各自的进程中。$!
一个外壳程序的方法不可能泄漏到另一个外壳程序中,就像在一个外壳程序中分配一个外壳程序变量不会影响另一个外壳程序中同名的变量一样(如果我们不考虑外壳程序的通用变量fish
) 。
现在,它tail -f /dev/null
是一个无限期运行的命令,但是对于短命的命令,请注意,由于可能的进程ID数量有限,因此不可避免地会重复使用进程ID。
在:
true &
pid=$!
那$pid
将包含运行shell的进程的ID true
,但是到您使用$pid
该ID时,该pid可能已死,并且可能引用了另一个进程。
$jobstate/$jobtext
检查那里的进程状态。并非没有种族,因为执行陷阱时孩子已经被收割,但这意味着非常短的种族窗口,其中pid不太可能已经被重用。