เพื่อลดความซับซ้อนของอินเทอร์เฟซ ทางเลือกในการ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
,
สิ่งเหล่านี้สามารถรวมกันได้ตามต้องการ ถ้าใครมากับรูปแบบใหม่ของแอตทริบิวต์กระบวนการคุณไม่ได้มีการเปลี่ยนแปลงและfork
exec
ดังที่กล่าวถึง 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 รสชาติสมัยใหม่อื่น ๆ