เพื่อลดความซับซ้อนของอินเทอร์เฟซ ทางเลือกในการforkและexecจะเป็นสิ่งที่ต้องการฟังก์ชั่นCreateProcessของ Windows สังเกตว่ามีพารามิเตอร์กี่ตัวCreateProcessและหลายตัวเป็น struct ที่มีพารามิเตอร์มากขึ้น นี้เป็นเพราะทุกอย่างCreateProcessที่คุณอาจต้องการที่จะควบคุมเกี่ยวกับกระบวนการใหม่จะต้องมีการส่งผ่านไปยัง ในความเป็นจริงCreateProcessไม่ได้มีพารามิเตอร์พอดังนั้นไมโครซอฟท์มีการเพิ่มCreateProcessAsUserและCreateProcessWithLogonW
ด้วยfork/execโมเดลคุณไม่จำเป็นต้องใช้พารามิเตอร์เหล่านั้นทั้งหมด execแต่คุณลักษณะบางอย่างของกระบวนการที่จะถูกเก็บไว้ข้าม นี้ช่วยให้คุณforkแล้วเปลี่ยนกระบวนการสิ่งที่คุณต้องการแอตทริบิวต์ (โดยใช้ฟังก์ชั่นเดียวกับที่คุณต้องการใช้ตามปกติ) และจากนั้น execใน Linux forkไม่มีพารามิเตอร์และexecveมีเพียง 3: โปรแกรมที่เรียกใช้บรรทัดคำสั่งที่ให้และสภาพแวดล้อม (มีexecฟังก์ชั่นอื่น ๆแต่พวกมันแค่ล้อมรอบที่execveจัดไว้ให้โดยไลบรารี C เพื่อลดความซับซ้อนกรณีการใช้งานทั่วไป)
forkหากคุณต้องการที่จะเริ่มต้นกระบวนการที่มีไดเรกทอรีปัจจุบันแตกต่างกัน: chdir, exec,
หากคุณต้องการที่จะเปลี่ยนเส้นทาง stdin / stdout: forkใกล้ / execเปิดไฟล์
forkหากคุณต้องการผู้ใช้งานสวิทช์: setuid, exec,
สิ่งเหล่านี้สามารถรวมกันได้ตามต้องการ ถ้าใครมากับรูปแบบใหม่ของแอตทริบิวต์กระบวนการคุณไม่ได้มีการเปลี่ยนแปลงและforkexec
ดังที่กล่าวถึง larsks, Unixes ทันสมัยส่วนใหญ่ใช้ copy-on-write ดังนั้นจึงforkไม่เกี่ยวข้องกับค่าใช้จ่ายที่สำคัญ
fork(2)หน้า man ภายใต้ Linux บอกว่า: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.ฉันจินตนาการ (แต่ไม่ทราบแน่ชัด) ว่านี่เป็นกรณีของ Unix รสชาติสมัยใหม่อื่น ๆ