我在这个脚本中发现了使用exec some_cmd &
的用法:
...
exec elixir \
-pa _build/prod/consolidated \
--no-halt \
--erl "+A$THREAD_COUNT" \
--erl "+K true" \
--erl "-smp auto" \
--erl "+scl false" \
--erl "+spp true" \
--erl "+swt low" \
--erl "+sbwt long" \
--sname $NODE \
--cookie $COOKIE \
-S mix run \
--no-compile \
$@ \
&
...
exec some_cmd
会用 some_cmd
替换原来的 shell。而 some_cmd &
则是在后台产生一个子进程来运行 some_cmd
。
那么将它们结合起来会发生什么呢?
我用 bash 3.2 尝试了一下,结果显示似乎它会在后台产生一个进程:
# script
echo "Shell PID: $$"
exec sh -c 'echo "Child PID: $$"' &
BG_PID=$!
echo "Background process PID: $BG_PID"
# output
Shell PID: 8852
Background process PID: 8853
Child PID: 8853
虽然我不确定它是否与 some_cmd &
完全相同。
exec
命令,不是Bash的。 - uasi