ide*_*con 3 command-line system
我正在阅读有关系统调用的内容,但我怀疑是否有任何命令在不进行任何系统调用的情况下运行。如果不是,那么系统调用最少的命令是什么?我用于strace一些命令,但它给出了一些很长的列表。有人可以告诉我这样的命令吗?
/bin/true并且/bin/false应该是系统调用最少的预装命令。
您可以通过静态链接保存一些系统调用:
将以下内容另存为例如 minimal.c
int main() {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
并使用编译它
gcc --static -o minimal minimal.c
Run Code Online (Sandbox Code Playgroud)
这将使您获得minimal当前工作文件夹中的程序。
谈到为了“运行”而实际执行的系统调用(“运行”因此解释为比您可能指的接受更广泛的接受)程序,不:首先,execve()系统调用始终执行只是为了运行命令(在这种情况下,我认为我们最好谈论可执行文件)本身,并且exit()系统调用总是在main()返回时执行:
C 编译器在 main() 返回后调用 exit()
(来源)
为了以某种方式解决您的问题,该问题依赖于可执行文件,因此非常广泛:作为概念证明,说明可能任何实际有用的可执行文件都将使用至少一个系统调用,值得说明的是,例如,一个exit()syscall 很可能会从程序本身执行,以防出错;更不用说任何打开/关闭文件描述符的可执行文件都将使用open()/close()系统调用。
最后,在任何实际有用的命令中,很可能至少有一个系统调用(例如,exit()如果程序在执行过程中遇到错误和/或open()/close()如果该命令必须读取任何文件)。