回覆列表
  • 1 # 使用者1508018967527

    學習要做到 要知其然,變要知其所以然。你在這裡將兩個概念混在一起了,1)Linux下所有程序都由init程序或其子程序產生。2)在Linux建立一個新程序都是透過fork函式,而該函式繁衍的子程序跟父程序一模一樣。

    init程序是萬物之靈

    在Linux世界裡,kernel這個上帝只建立了init程序,就收工回家了,其它子程序都是init程序透過/etc/rcX.d/目錄下的指令碼建立的。Linux的程序是一個家族樹的關係,祖先就是init程序。一旦某個程序的父親死掉之後,它都被init領養(init將成為它的新父親)。

    建立子程序

    建立子程序,是非常常見的事情,比如執行一個程式。但是在Linux裡面,卻有一個非常奇怪的事情,儘管你想從一個程式開始執行一個程序,但Linux必須要求你先執行fork,然後再執行execve,才能完成你想要的事情。在fork完成後,新的程序居然會跟父程序一模一樣,只有執行execve之後,才變了個樣。

    當然,如果你厭惡這種“反人類”的設計,你大可直接使用 posix_spawn 函式,從程式“一步到位地”建立新程序。這裡的一步到位之所以打上引號,是因為它內部實現時,一樣是fork + execve的。

    綜上:inux中所有程序都是從init程序而來,子程序透過fork從父程序繁衍而來,但透過execve可以脫胎換骨。

  • 中秋節和大豐收的關聯?
  • 女朋友把自己最喜歡的頭像換了是什麼意思?