在我的测试中,到目前为止,我总是得到正确的结果:
[fabian@manjaro ~]$ sleep 10 & echo $!
[1] 302657
302657
但是sleep
和echo
在这里同时执行,所以我希望有时会发生echo
在$!
正确设置值之前执行的情况。这会发生吗?为什么对我来说没有那么远?
我的最终目标:并行执行两个任务,然后在继续之前等待两者。目前的计划是使用类似foo & bar; wait $!; baz
. 这是否总是有效,还是有时可以等待任意较旧的后台进程(或者根本不等待,如果$!
为空)?
所以
sleep 10 & echo $!
是两个命令
sleep 10 &
echo $!
他们在同一条线上并不会改变这一点。
所以shell会fork()
新建一个进程,并将新进程的进程ID放入$!
. 然后新进程将运行sleep
,另一个进程将运行echo
.
因此您可以确定$!
将始终持有新进程的 PID,即使该进程失败;这是 的结果fork()
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句