对于传递给exec()的shell脚本中的每个命令,它是否分支并在子进程中运行? 假设我有一个名为test.sh的shell脚本,其中包含以下内容;
#!/bin/bash
echo Hello
echo There
我想知道的是,如果我要在C程序中的test.sh上调用execvp(),那么如何处理一系列命令。
对于脚本中的每个命令,在返回父级并对下一个命令重复之前,是否有一个派生后跟该命令的另一个exec调用?
到目前为止,我已经在这个确切的示例上使用了strace。我的发现是,如果我在脚本中添加了两个回显,则不会调用clone()(我相信这相当于分叉?),但是如果我将两只单独的猫这样:
#!/bin/bash
cat file1
cat file2
然后,我在strace中找到两个要克隆的调用。同时,单独跟踪单个cat调用,而不从shell脚本上的execvp调用运行它,不会在strace中产生任何克隆。
我非常希望澄清exec调用处理shell脚本的方式。