Đó là để đơn giản hóa giao diện. Thay thế cho forkvà execsẽ là một cái gì đó giống như chức năng CreatProcess của Windows . Lưu ý có bao nhiêu tham số CreateProcess, và nhiều trong số chúng là các cấu trúc với nhiều tham số hơn. Điều này là do mọi thứ bạn có thể muốn kiểm soát về quy trình mới phải được chuyển qua CreateProcess. Trên thực tế, CreateProcesskhông có đủ tham số, vì vậy Microsoft đã phải thêm CreatProcessAsUser và CreatProcessWithLogonW .
Với fork/execmô hình, bạn không cần tất cả các tham số đó. Thay vào đó, các thuộc tính nhất định của quá trình được bảo tồn trên exec. Điều này cho phép bạn fork, sau đó thay đổi bất kỳ thuộc tính quy trình nào bạn muốn (sử dụng cùng các chức năng bạn sử dụng bình thường), sau đó exec . Trong Linux, forkkhông có tham số và execvechỉ có 3: chương trình để chạy, dòng lệnh để cung cấp cho nó và môi trường của nó. (Có các execchức năng khác , nhưng chúng chỉ là các hàm bao quanh execveđược cung cấp bởi thư viện C để đơn giản hóa các trường hợp sử dụng phổ biến.)
Nếu bạn muốn bắt đầu một quá trình với một thư mục hiện hành khác nhau: fork, chdir, exec.
Nếu bạn muốn chuyển hướng stdin / stdout : fork, đóng / mở tệp , exec.
Nếu bạn muốn sử dụng công tắc: fork, setuid, exec.
Tất cả những điều này có thể được kết hợp khi cần thiết. Nếu ai đó nghĩ ra một loại thuộc tính quy trình mới, bạn không phải thay đổi forkvà exec.
Như larsks đã đề cập, hầu hết các Unix hiện đại đều sử dụng copy-on-write, do forkđó không liên quan đến chi phí đáng kể.
fork(2)trang man trong Linux nói: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.Tôi tưởng tượng (nhưng không biết chắc chắn) rằng đây là trường hợp cho các hương vị Unix hiện đại khác.