什么“exec some_cmd&”在bash中意味着什么

时间:2015-12-26 06:10:25

标签: bash

我在this script中找到了使用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_cmdsome_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 &完全相同。

1 个答案:

答案 0 :(得分:3)

exec命令在这种情况下无效。通常情况下,exec会在调用execve之前阻止bash分叉,但在这种情况下bash forks仍然是因为你说&

因此exec some_cmd &some_cmd &相同。

如果您需要使用其中一个exec标记,则可以将&exec一起使用。输入help exec以查看exec支持的标记。