设为首页收藏本站language→→ 语言切换

鸿鹄论坛

 找回密码
 论坛注册

QQ登录

先注册再绑定QQ

查看: 450|回复: 1
收起左侧

对“Fork”做一个技术方面的简介

[复制链接]
发表于 2017-9-17 22:39:12 | 显示全部楼层 |阅读模式
使用过 GitHub 的人大多知道它上面有个“Fork”的功能,用来将某个仓库克隆到你的账户之下,从而可以对其进行修改、衍生,也可以比较方便的将你的修改推回到原来的仓库(所谓的上游)。
随着 GitHub 的流行,我们经常能在各种文章中见到,“fork 某某项目”等说法,是的,“fork”这个一直没有一个正式的译名。
其实这个问题不独出现在 GitHub 中,fork 这个词更早的出现在 Unix/Linux 中的 C 语言编程之中。在 Unix/Linux 的进程模型中,fork 是指进程创建自身副本的操作,它通常是一个在内核中实现的系统调用。fork 是 Unix 类系统中进程创建的主要方式(历史上曾经是唯一的方式)。从那个时候起,fork 就一直没有一个确定的译名。
不过,我们认为,对于这样的一个经常使用的专业名词,有一个明确的译名比较适合,虽然大家都习惯了直接用 fork 一词。
fork 一词在英文中的原意是“叉子”, 虽然翻译成“分叉”、“分支”似乎也可以,但是前者较少用做动词,后者则和 Branch 的译名重复混淆。
据 Linux 中国翻译组(LCTT)的译者 dongfengweixiao 提议,可译作“复刻”,我们认为这是一个可取的译法,一方面照顾到了音译,另一方面其释义也形象直观。
既然说到这里,顺便我们对复刻()做一个技术方面的简介吧。
复刻() GitHub 仓库
在 GitHub 上评价一个项目(仓库)是否流行,其中一个重要指标就是其复刻()数。
在 GitHub 上参与一个开源项目的程度有三个阶段:
  • star(点赞),如果你觉得某个项目不错,可以为其点赞(star)
  • watch(关注),如果你希望进一步关注这个项目的进展,可以关注(watch)它
  • fork(复刻),如果你还想进一步为这个项目做一些贡献,可以复刻(fork)它到你自己的账户下,做出了修改之后通过 Pull-Request(PR)方式将你的改动推回给原仓库(上游),如果被接纳就会进入到原仓库之中
显然,一个项目的复刻数越高,代表着贡献者越多。
通过复刻() + PR 的方式对开源项目进行贡献的流程类似下图:

                               
登录/注册后可看大图

我们知道 GitHub 是运行在 Git 之上的,GitHub 中的复刻(fork)其本质上是 Git 中的克隆(clone)。关于 GitHub 中的复刻的进一步介绍,可以参考“在 Github 和 Git 上 fork 之简单指南”一文。
顺便说一句,我们的 LCTT 翻译组就是通过复刻fork + PR 的方式运作的,这也是 GitHub 上绝大多数开源项目的运作方式。
复刻()子进程
在 Unix 下的 C 语言编程中,通过 fork() 系统调用来对进程本身进行复制,然后被复制出来的子进程就可以执行不同于父进程的操作,或通过 exec() 运行其它进程。典型的 C 代码如下:
fpid = fork();   if (fpid < 0)       printf("error in fork!");   else if (fpid == 0) {      printf("i am the child process, my process id is %d/n",getpid());   } else {      printf("i am the parent process, my process id is %d/n",getpid());   }所有的服务器守护进程,包括你所见到的 Web 服务、MySQL 数据库服务等,都是通过这种方式来产生子进程来提供服务的。甚至,整个 Linux/Unix 中的进程,除了 init 进程本身之外,都是由 init 进程复刻(fork)出来的。关于服务器编程方面的复刻(fork)的使用,可以进一步参阅“搭个 Web 服务器(三)”一文。
复刻()炸弹
其实,不只是 C 语言里面有复刻(fork)的功能,在 shell 里面也有,想必大家可能都听说过 “fork 炸弹”,这就是利用函数的迭代执行,无限复刻(fork)出许多子进程,从而耗尽系统资源,导致系统崩溃的一个恶意(玩笑)用法。

                               
登录/注册后可看大图

复刻炸弹有很多种形式,不过最简洁的可能就是如上图的这个了,关于这个炸弹的具体解释,可以参阅“经典的 Fork 炸弹解析”,在此就不赘述了。
如果你对 fork 的翻译有不同的意见,欢迎留言评论。

免费提供最新Linux技术教程书籍,为开源技术爱好者努力做得更多更好,开源站点:http://www.linuxprobe.com/

发表于 2017-9-18 12:13:05 | 显示全部楼层
感谢楼主分享!
沙发 2017-9-18 12:13:05 回复 收起回复
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2024-4-26 05:12 , Processed in 0.070931 second(s), 9 queries , Redis On.  

  Powered by Discuz!

  © 2001-2024 HH010.COM

快速回复 返回顶部 返回列表