bash -c在同一进程中运行脚本



我运行了一些测试,看看bash -c如何为给定的命令生成子进程,并注意到一些奇怪的行为。

test.sh的内容:

#!/usr/bin/env fish
echo $fish_pid
readlink /proc/$fish_pid/exe

实验结果如下:

$ bash -c 'echo $$ && ./test.sh'
296
296
/usr/bin/fish
$ bash -c 'echo $$ && ./test.sh && echo $$'
403
404
/usr/bin/fish
403
$ bash -c 'echo $$; ./test.sh'
317
318
/usr/bin/fish
$ bash -c 'echo $$; exec ./test.sh'
349
349
/usr/bin/fish

这几乎就像bash通过在第一种情况下自动插入exec来进行尾部调用优化。这是怎么回事?

正是你所描述的;Bash注意到它可以重用当前进程,因此避免执行fork()系统调用,然后在exec()系统调用足够时等待子进程。

不清楚为什么在第三种情况下没有这样做;这一点似乎和第一个一样明确,甚至更明确。

相关内容

  • 没有找到相关文章

最新更新