我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
。在后台作为子进程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
在这种情况下,该命令无效。通常,exec
这可以防止bash在调用之前分叉execve
,但是在这种情况下bash还是会分叉,因为您说过了&
。
因此exec some_cmd &
与相同some_cmd &
。
您可以使用exec
与&
如果你需要使用的一个反正exec
标志。输入help exec
以查看标志exec
支持的内容。