Linux中國

復刻:為 fork 的中文翻譯定名

fork 一詞在英文中的原意是「叉子」, 雖然翻譯成「分叉」、「分支」似乎也可以,但是前者較少用做動詞,後者則和 Branch 的譯名重複混淆。

據 Linux 中國翻譯組(LCTT)的譯者 dongfengweixiao 提議,可譯作「復刻」,我們認為這是一個可取的譯法,一方面照顧到了音譯,另一方面其釋義也形象直觀。

補充 1,「復刻」這樣的譯法,在網路上已存在,包括中文維基中也採用該譯法,只是並未得到公認和流行。

補充 2,據 @愛開源魅影 稱,git 軟體包裡面,蔣新將「fork」譯為「派生」。似也可取。

既然說到這裡,順便我們對 復刻 fork 做一個技術方面的簡介吧。

復刻 fork GitHub 倉庫

在 GitHub 上評價一個項目(倉庫)是否流行,其中一個重要指標就是其 復刻 fork 數。

在 GitHub 上參與一個開源項目的程度有三個階段:

  • star(點贊),如果你覺得某個項目不錯,可以為其點贊(star)
  • watch(關注),如果你希望進一步關注這個項目的進展,可以關注(watch)它
  • fork(復刻),如果你還想進一步為這個項目做一些貢獻,可以復刻(fork)它到你自己的賬戶下,做出了修改之後通過 Pull-Request(PR)方式將你的改動推回給原倉庫(上游),如果被接納就會進入到原倉庫之中

顯然,一個項目的復刻數越高,代表著貢獻者越多。

通過 復刻 fork + PR 的方式對開源項目進行貢獻的流程類似下圖:

我們知道 GitHub 是運行在 Git 之上的,GitHub 中的 復刻 fork 其本質上是 Git 中的 克隆 clone 。關於 GitHub 中的復刻的進一步介紹,可以參考「在 Github 和 Git 上 fork 之簡單指南」一文。

順便說一句,我們的 LCTT 翻譯組就是通過 復刻 fork + PR 的方式運作的,這也是 GitHub 上絕大多數開源項目的運作方式。

復刻 fork 子進程

在 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 伺服器(三)」一文。

復刻 fork 炸彈

其實,不只是 C 語言裡面有 復刻 fork 的功能,在 shell 裡面也有,想必大家可能都聽說過 「fork 炸彈」,這就是利用函數的迭代執行,無限 復刻 fork 出許多子進程,從而耗盡系統資源,導致系統崩潰的一個惡意(玩笑)用法。

復刻炸彈有很多種形式,不過最簡潔的可能就是如上圖的這個了,關於這個炸彈的具體解釋,可以參閱「經典的 Fork 炸彈解析」,在此就不贅述了。

如果你對 fork 的翻譯有不同的意見,歡迎留言評論。


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國