Spawn (computing)
From Wikipedia, the free encyclopedia
This article may require cleanup to meet Wikipedia's quality standards. Please improve this article if you can. (March 2007) |
To comply with Wikipedia's lead section guidelines, the first sentence of this article should use the verb to be to answer the question "What is it?" (or "Who is he/she" for persons). Please discuss this issue on the talk page and read the layout guide to make sure the section will be inclusive of all essential details. |
Under Windows, the spawn operating system functions load and execute a new child process. The current process may or may not continue to execute asynchronously. Creating a new subprocess requires enough memory in which both the child process and the current program can execute.
The spawn functions are inspired by Unix fork and exec; however, as Windows does not support fork (at least in the Win32 API; POSIX emulation environments such as Cygwin or SFU do), the spawn function was supplied as a replacement for the fork-exec combination. 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. However, in these cases, this deficiency can be made up for by using the more low-level CreateProcess API.
Files that are open when a spawn call is made remain open in the child process.
In the spawnl, spawnlp, spawnv, and spawnvp calls, the child process inherits the environment of the parent.
Contents |
[edit] Prototype
int spawnl(int mode, char *path, char *arg0, ...);
int spawnle(int mode, char *path, char *arg0, ..., char ** envp);
int spawnlp(int mode, char *path, char *arg0, ...);
int spawnlpe(int mode, char *path, char *arg0, ..., char ** envp);
int spawnv(int mode, char *path, char **argv);
int spawnve(int mode, char *path, char **argv, char ** envp);
int spawnvp(int mode, char *path, char **argv);
int spawnvpe(int mode, char *path, char **argv, char ** envp);
[edit] Function names
The base name of each function is spawn, followed by one or more letters:
Name | Notes |
---|---|
e | An array of pointers to environment arguments is explicitly passed to the child process. |
l | Command line arguments are passed individually to the function. |
p | Uses the PATH argument variable to find the file to be executed. |
v | Command line arguments are passed to the function as an array of pointers. |
[edit] Mode
The mode argument determines the way the child is run. Values for mode are:
Name | Notes |
---|---|
_P_OVERLAY | Overlays parent process with child, which destroys the parent. This has the same effect as the exec* functions. |
_P_WAIT | Suspends parent process until the child process has finished executing (synchronous spawn). |
_P_NOWAIT, _P_NOWAITO | Continues to execute calling process concurrently with new process (asynchronous spawn). |
_P_DETACH | the child is run in background without access to the console or keyboard. Calls to _cwait upon the new process will fail (asynchronous spawn) |
[edit] Path
The path argument specifies the filename of the program to execute. For spawnlp and spawnvp only, if the filename does not have a path and is not in the current directory, the environment variable PATH determines which directories to search for the file. The string pointed to by argv[0] is the name of the program to run.
The command line passed to the spawned program is made up of the character strings, arg0 through argn, in the spawn call. The accepted maximum combined length of these strings differs between compilers, ranging from 128 characters on Digital Mars[1] to 1024 on Microsoft Visual C++[2] or as much as memory permits, on DJGPP.[3]
[edit] argv
The argv argument is an array of character pointers. The last pointer in th array must be null to indicate the end of the list.
[edit] envp
The spawnle, spawnlpe, spawnve, and spawnvpe calls allow the user to alter the child process's environment by passing a list of environment settings in the envp argument. This argument is an array of character pointers; each pointer (except for the last one) points to a null-terminated string defining an environment variable. An environment variable has the form:
- name=value
where name is the variable name and value is its value. The last pointer in the array is null. When the envp argument is null, the child inherits the parent's environment settings.
The spawn functions can be used under Microsoft Windows. They use LoadModule to run the spawned process. If this fails, an attempt is made to spawn a normal MS-DOS process. If a Windows application is spawned, the instance handle can be obtained using exec_instancehandleget. It is possible to specify how the spawned program will be shown using the functions _exec_showset, _exec_showget, and _exec_showreset.
[edit] Return values
The return value indicates the exit status of the spawned program. A value of zero indicates that the spawned program executed successfully. A positive value indicates that the spawned program executed, but was aborted or ended in error, the value returned is the exit status of the child process. A negative value indicates that the spawned program did not execute, and errno is set. Under Microsoft Windows, spawn returns the negated error code returned from LoadModule for compatibility with the C run-time library. The following error codes may be encountered:
Value | Notes |
---|---|
-2 |
File not found |
-3 |
Path not found |
-11 |
Invalid .exe file (for Windows) |
-13 |
DOS 4. 0 application |
-14 |
Unknown .exe type (may be DOS extended) |