为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

2 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

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源码才能找到上面提到的信息。

查看完整回答
反对 回复 2021-03-28
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

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源码才能找到上面提到的信息。



查看完整回答
反对 回复 2021-03-28
  • 2 回答
  • 0 关注
  • 657 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信