Ini untuk menyederhanakan antarmuka. Alternatif untuk forkdan execakan menjadi sesuatu seperti fungsi CreateProcess Windows . Perhatikan berapa banyak parameter yang CreateProcessdimiliki, dan banyak dari mereka adalah struct dengan lebih banyak parameter. Ini karena semua yang Anda mungkin ingin kontrol tentang proses baru harus diteruskan CreateProcess. Faktanya, CreateProcesstidak memiliki parameter yang cukup, jadi Microsoft harus menambahkan CreateProcessAsUser dan CreateProcessWithLogonW .
Dengan fork/execmodel, Anda tidak perlu semua parameter itu. Alih-alih, atribut tertentu dari proses dipertahankan di seluruh exec. Ini memungkinkan Anda untuk fork, kemudian mengubah atribut proses apa pun yang Anda inginkan (menggunakan fungsi yang sama seperti yang biasa Anda gunakan), lalu exec . Di Linux, forktidak memiliki parameter, dan execvehanya memiliki 3: program untuk dijalankan, baris perintah untuk memberikannya, dan lingkungannya. (Ada execfungsi - fungsi lain , tetapi mereka hanya pembungkus yang execvedisediakan oleh perpustakaan C untuk menyederhanakan kasus penggunaan umum.)
Jika Anda ingin memulai proses dengan direktori saat ini berbeda: fork, chdir, exec.
Jika Anda ingin mengarahkan ulang stdin / stdout:, forktutup / buka file exec,.
Jika Anda ingin pengguna beralih: fork, setuid, exec.
Semua hal ini dapat digabungkan sesuai kebutuhan. Jika seseorang menghasilkan atribut proses jenis baru, Anda tidak perlu mengubah forkdan exec.
Seperti yang disebutkan oleh larsks, sebagian besar Unix modern menggunakan copy-on-write, jadi forktidak melibatkan overhead yang signifikan.
fork(2)halaman manual di Linux mengatakan:Under Linux, fork() is implemented using copy-on-write pages, so the only penalty that it incurs is the time and memory required to duplicate the parent's page tables, and to create a unique task structure for the child.Saya membayangkan (tetapi tidak tahu pasti) bahwa ini adalah kasus untuk rasa Unix modern lainnya.