我正在用 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
之后, fork 的shell 脚本将继续?这意味着我的 shell 脚本的其余部分将被执行两次?
当我在 Bash 脚本中像这样使用 &
时到底发生了什么?
最佳答案
在您的示例中,& 符号仅 fork 对 foo() 的调用。它不是 fork 整个脚本。只有 foo() 在单独的线程中运行,当 foo() 完成时退出。 bar() 和 baz() 继续在同一个线程中运行
关于linux - 当我将 `&` 与 Bash 脚本中的函数一起使用时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21091867/