bash用什么来打开/执行argv [0]?

rhg*_*lnx 3 c linux bash shell

如果这是一个愚蠢的问题,我会提前道歉,但是我深入研究它会让我更加困惑.我正在教自己C并且最近一直在研究文件"开放"相关的函数和宏,以便更好地理解究竟发生了什么.

所以,我的愚蠢问题是,在运行Centos 6.6并使用Bash shell的系统上,当从命令提示符调用程序时,究竟是什么打开了argv [0]来执行?

我已经通过LD_PRELOAD指令试验了(我认为被称为拦截程序)并通过导出共享对象文件,并且可以至少跟踪一些对"open"和"open64"的调用.

我使用的调试样式打印语句给我打开了文件名但是我注意到从命令行调用的程序(我假设是argv [0])看起来并不像是被这些中的任何一个引用.

这导致我开始闯入bash源而没有取得任何实际进展.

我非常感谢我可能需要寻找什么以及在哪里?我对argv,argv(,main(,execev,ioctl和fcntl,google搜索和搜索的留言板)进行了grep'ed但是没有取得进展.

我非常感谢任何关于此的建议或指示.

Mic*_*urr 5

获取源代码bash(注意:它不是一个简单的shell - 它是一个非常复杂的程序):

  • git clone git://git.savannah.gnu.org/bash.git.

看看文件execute_cmd.c和功能execute_disk_command()shell_execve().

基本上execute_disk_command()执行a fork()(通过辅助函数make_child()后跟execve()(via shell_execve()).

  • 如果要在线浏览,请使用外部参照:http://code.metager.de/source/xref/gnu/bash/execute_cmd.c#5192和http://code.metager.de/source/xref/gnu/庆典/ execute_cmd.c#4845 (2认同)