我正在用shell脚本调试一个怪异的东西,想知道是否误解了Bash的“ fork”(&
)的工作方式,也许是因为我通常通过终端在单个命令中使用它,例如:
[~me]$ someExecutable &
现在,在一个shell脚本中:
foo() {
echo "logic"
}
bar() {
echo "idic"
}
baz() {
echo "katra"
}
foo &
bar
baz
我的目的是要foo
异步调用该函数,然后让脚本的其余部分在原始过程上下文中继续执行。
当我执行此示例脚本时,确实获得了预期的输出:
logic
idic
katra
(即,只有单个表观调用bar
和baz
;我不在所有由相对困扰顺序的三条线的输出,这我明白可能会发生变化)
但是我可能会误解输出和脚本本身。如果是这样,那肯定可以解释我在实际代码中看到的怪异之处,并且使我不必再进行任何深入研究。
在子进程中,调用后,是否有可能foo
继续执行分支的shell脚本?这意味着我的shell脚本的其余部分将执行两次吗?
当我&
在Bash脚本中这样使用时,真正发生了什么?
在您的示例中,“&”号只是派生了对foo()的调用。它不是分叉整个脚本。仅foo()在单独的线程中运行,该线程在foo()完成时退出。bar()和baz()继续在同一线程中运行
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句