Creating a new subprocess requires enough memory in which both the child process and the current program can execute.
However, the spawn function, although it deals adequately with the most common use cases, lacks the full power of fork-exec, since after fork any process settings which will survive an exec may be changed.
In the spawnl, spawnlp, spawnv, and spawnvp calls, the child process inherits the environment of the parent.
The accepted maximum combined length of these strings differs between compilers, ranging from 128 characters on Digital Mars[3] to 1024 on Microsoft Visual C++[4] or as much as memory permits, on DJGPP.
They may be efficient replacements for fork and exec, but their purpose is to provide process creation primitives in embedded environments where fork is not supported due to lack of dynamic address translation; however, may Unix-like operating systems with full dynamic address translation support also implement them.
The spawn metaphor, i.e., to produce offspring as in egg deposition, had its early use in the VMS, now OpenVMS, operating system (1977).
In academia, there existed a lively debate between proponents of the Unix fork (crude copy of memory layout, but fast) versus VMS's spawn (reliable construction of process parameters, but slower).