【发布时间】:2014-01-13 12:55:08
【问题描述】:
我正在用一个 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 脚本中像这样使用 & 时会发生什么?
【问题讨论】: