当一个shell(例如bash
)调用一个可执行文件时,它首先fork
自己,然后它的execve
执行文件。
当shell调用内置命令时,不会创build新的进程,而execve
只能对可执行文件进行操作,而内置命令不会存储在可执行文件中。
那么如何存储内置的命令,以及如何调用系统调用?
“内建命令”意味着您不必运行外部程序。 所以,不,根本就不涉及任何execve
,不,甚至没有任何涉及的系统调用。 你的shell真的只是解析一个命令字符串,并看到“嘿,这是一个内置的命令,让我们执行这个和那个功能”。
你可以想象它们和shell函数是一样的。
因此,shell不是启动外部进程,而是调用一些内部函数库函数,它读取输入的输出结果,几乎与常规程序的主要功能相同。
shell进程本身只是处理内置的,并可能因此而改变自己或其环境。 可能根本没有任何系统调用。