使用过 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做一个简单介绍,对“Fork”做一个技术方面的简介相关推荐

  1. LINUX矩阵键盘简单介绍,介绍一种新型的矩阵键盘电路

    这款新型的矩阵键盘电路,把传统的矩阵键盘与单片机的中断结合起来,提高了按键输入的响应,同时利用数码管作为显示终端,显示输入的按键值. 原理简介 普通的4X4矩阵键盘接口原理图如下图所示,可以控制16按 ...

  2. Linux curl使用简单介绍

    http://www.linuxidc.com/Linux/2008-01/10891.htm -------------------------------------------------- L ...

  3. 复杂的事情简单做,简单的事情重复做,重复的事情用心做!

    人们常说"复杂的事情简单做,简单的事情重复做,重复的事情用心做!",其中真正的内涵是什么呢? 所有事情想完成都是复杂的,复杂的事情简单做,只有将步骤简单化,理出脉络,才能着手去做. ...

  4. 简单介绍一下CAD做三维图的REVOLVE指令

    CAD做二维图时用旋转的命令,可以调整图形的角度,同样CAD做三维图也有一个旋转命令,这个命令就是REVOLVE命令,是很常用的建模功能. 使用 REVOLVE 命令,以通过绕轴旋转开放或闭合的平面曲 ...

  5. redisdemo php,一个简单的用redis做秒杀支撑的demo (PHP版)

    用redis做秒杀的库存扣除, 限制每个账号只能抢购一次, 这个简单的demo使用了string, hash, list三种基本类型. 用string类型的int值来存储剩余库存, 并在抢购成功后减1 ...

  6. 编译Linux内核没有zImage,Linux 编译系统的简单介绍与内核编译安装

    这里不只是讲怎样编译.安装Linux内核的,更主要的是介绍内核的编译系统和各个重要的文件.最后还利用学到的编译.安装Linux内核去修改Linux的01调度变成随机调度.如果你只是需要编译.安装内核的 ...

  7. php编写一个简单计算器程序,PHP做一个简单的计算器

    本文为大家讲解通过分支循环知识及PHP的表单处理一个简单的计算器 首先看下效果 通过网页显示计算器样式 在网页样式中可以看出,有两个输入框Num1.Num2和一个下拉框Type 还有一个提交按钮 在输 ...

  8. php一个简单的投票系统_一个简单的PHP投票系统

    一个简单的PHP投票系统 分享到: 作者:转接卡 建立2个表,一个用来显示当前主题,一个存放历史结果. 当前主题表结构:选项(包括主题),票数 历史结果表结构:id,主题名,关点,投票开始时间,投票结 ...

  9. 一个简单的二维码传输技术(Python语言)

    二维码传输技术 程序效果 1.界面设计 2.识别效果 程序设计 1.二维码生成 2.二维码读取和显示 3.二维码识别 程序 程序效果 这是一个利用二维码传输文件的Python程序,目前能传输最大1MB ...

最新文章

  1. python工程~多个python文件如何运行
  2. 详解Spring MVC 4之ViewResolver视图解析器
  3. springcloud 消息队列_全面而且简洁介绍SpringCloud微服务
  4. Akamai首席架构师Will:WebRTC、QUIC、DASH、AV1都前景可观
  5. ajax put请求_前端基础面试:手写一个ajax,说说XMLHttpRequest 都有哪些属性?
  6. 操作系统实验文件管理_系统设计硬核知识(5)——操作系统的文件管理
  7. 使用Java RMI时要记住的两件事
  8. 前端学习(3078):vue+element今日头条管理-分页总页码的实现
  9. 位数问题(信息学奥赛一本通-T1313)
  10. mysql打错了怎么办_数据库出错了怎么办?
  11. LightOJ-1054 Efficient Pseudo Code
  12. 豆丁当当免费下载神器
  13. 数学建模【开会总结】
  14. 诗词格律[5] 词的基本知识
  15. 食品和饮料销售预测分析
  16. 一学校出150名在校“老板”
  17. 网页版微信自动群发消息
  18. 计算机毕业设计Python+uniapp学生考勤系统小程序(小程序+源码+LW)
  19. 小米3刷android 6.0,安卓6.0版MIUI7曝光:小米3/小米4/小米Note将尝鲜
  20. lnmp分离网站基础架构

热门文章

  1. Mysql semi-sync VS group replication, 谁快?
  2. lua的面向对象编程,封装,继承,多态的实现
  3. 关于“粪”,你知道多少?【Feign是个什么玩意儿?】
  4. vb 如何给静态变量赋初值
  5. Java中的类型推断和lambda表达式
  6. JDK 14的新特性:文本块Text Blocks
  7. 一致性协议raft详解(四):raft在工程实践中的优化
  8. fastjson 过滤不需要的字段或者只要某些字段
  9. Spring Security学习(二)
  10. 算法训练营07-递归使用练习