unix - why fork and exec are kept 2 seperate calls -
i understand differences between fork, vfork, exec, execv, execp. pls dont rant it. question design of unix process creation. why did designers think of creating 2 seperate calls ( fork , exec ) instead of keeping 1 tight call ( spawn ). api design reason developers had more control on process creation? because of performance reason, delay allocating process table , other kernel structures child till either copy-on-write or copy-on-access?
the main reason separation of fork()
, exec()
steps allows arbitrary setup of child environment done using other system calls. example, can:
- set arbitrary set of open file descriptors;
- alter signal mask;
- set current working directory;
- set process group and/or session;
- set user, group , supplementary groups;
- set hard , soft resource limits;
...and many more besides. if combine these calls single spawn()
call, have have complex interface, able encode of these possible changes child's environment - , if ever added new setting, interface need changed. on other hand, separate fork()
, exec()
steps allow use ordinary system calls (open()
, close()
, dup()
, fcntl()
, ...) manipulate child's environment prior exec()
. new functionality (eg. capset()
) supported.
Comments
Post a Comment