Linux fork()和sys_fork()的区别

Linux fork()和sys_fork()的区别,linux,kernel,system-calls,Linux,Kernel,System Calls,我看到所有系统调用(比如x)都与另一个调用相关,如sys_x(): 例如:fork和sys_fork()、open()和sys_open()等 这些sys_x()调用的意义是什么?我们在哪里可以使用这些电话 这些sys_x()调用的意义是什么 正如名称所示,这些是在内核模式下执行的实际系统调用 您可以看到,当您从应用程序调用fork(2)或open(2)时,您并没有直接调用原始系统调用;相反,您正在调用glibc的包装器,这些包装器知道如何调用实际的系统调用。之所以需要这个间接步骤,是因为系统调

我看到所有系统调用(比如x)都与另一个调用相关,如sys_x(): 例如:fork和sys_fork()、open()和sys_open()等

这些sys_x()调用的意义是什么?我们在哪里可以使用这些电话

这些sys_x()调用的意义是什么

正如名称所示,这些是在内核模式下执行的实际系统调用

您可以看到,当您从应用程序调用
fork(2)
open(2)
时,您并没有直接调用原始系统调用;相反,您正在调用glibc的包装器,这些包装器知道如何调用实际的系统调用。之所以需要这个间接步骤,是因为系统调用是特定于体系结构的,所以细节隐藏在glibc中

我们在哪里可以使用这些电话

你没有。首先,
sys\u fork()
是Linux特有的;其他UNIX变体不需要(可能也不需要)实现
sys\u fork()
函数。内核中处理分叉的确切函数取决于系统。碰巧Linux有一个名为
sys\u fork()
sys\u open()
,等等的函数

例如,在
fork(2)
的情况下,Linux中的流程或多或少类似于:

fork()
->glibc包装器->原始系统调用调用->转换到内核模式->系统调用查找->
sys\u fork()
->
do\u fork()