- Operating Systems
The shell is a program, that uses 2 important native C system calls:
exec(). These 2 system calls are used in the creation
Fork creates a copy of the calling process as its child. This is how most processes (except for init) begins.
Exec refers to a family of functions that replace the current image
with a new process image. It replaces defining parts of the current
process’s memory stack with new parts loaded from an executable (e.g.
fork() is usually a necessary first step, otherwise the calling
process will be replaced and no new process will be created.
Isn’t this inefficient?
No. The copy produced by the
fork() is an abstraction, as the kernel
uses a copy-on-write system.
fork() creates a virtual memory map. If
the copy is immediately followed by
exec(), parts that are
overwritten need not be copied. In addition, many parts of the child
process (e.g. its environment) need not be duplicated.