猿问

fork()函数真正被实现的文件是哪个?

我在unistd.h中找到的fork是extern过来的: 
extern __pid_t fork (void) __THROW;
所以我想知道这个fork到底在哪实现的?我想高清楚进程的创建过程,所以想从最初的fork一直看起,看看它是怎么调用的sys_fork();即这个过程是怎么用代码实现的?这段代码在哪?望详解!不胜感激!

万千封印
浏览 658回答 2
2回答

慕桂英4014372

fork 实际上是操作系统提供的系统调用 (syscall),它是由操作系统,比如你在linux系统上,就要看内核源码。至于程序中我们使用的 fork 接口本身,是由标准C库,libc 实现的,它其实很简单,直接调用了操作系统提供的系统调用。如果你是想看这个,去下载 glibc 源码找吧,不过没什么意义,对于系统调用来说,libc只是起个二传手的作用,自己什么都不做。在linux内核源码中 linux-2.6.32.10/arch/x86/kernel/syscall_table_32.S 中是所有系统调用接口定义的地方。 搜索之后你会发现 sys_fork 最终调用了 do_fork再在 linux-2.6.32.10/kernel/fork.c 可以看到 do_fork的实现。所以具体的代码就在 kernel/fork.c 里了。注意,你必须下载kernel源码才能找到上面提到的信息。

红糖糍粑

fork 实际上是操作系统提供的系统调用 (syscall),它是由操作系统,比如你在linux系统上,就要看内核源码。至于程序中我们使用的 fork 接口本身,是由标准C库,libc 实现的,它其实很简单,直接调用了操作系统提供的系统调用。如果你是想看这个,去下载 glibc 源码找吧,不过没什么意义,对于系统调用来说,libc只是起个二传手的作用,自己什么都不做。在linux内核源码中 linux-2.6.32.10/arch/x86/kernel/syscall_table_32.S 中是所有系统调用接口定义的地方。 搜索之后你会发现 sys_fork 最终调用了 do_fork再在 linux-2.6.32.10/kernel/fork.c 可以看到 do_fork的实现。所以具体的代码就在 kernel/fork.c 里了。注意,你必须下载kernel源码才能找到上面提到的信息。
随时随地看视频慕课网APP
我要回答