title: Process.h
text: # Process.h
  
  process.h is a C header file which contains function declarations and macros used in working with threads and processes. Most C compilers that target DOS, Windows 3.1x, Win32, OS/2, Novell NetWare or DOS extenders supply this header and the library functions in their C library. Neither the header file nor most of the functions are defined by either the ANSI/ISO C standard or by POSIX.
  
  ## History
  
  Microsoft's version of the file dates back to at least 1985, according to its copyright statement. An early reference to the file was in a post on the net.micro.pc usenet on Oct-26-1986. The compiler used was Microsoft C compiler version 3.0. The Lattice C compiler version 3.30 (Aug-24-1988) did not have such a header file, but offered similar functions. Borland provided the header in their Turbo C compiler version 2.01. The C Ware-Personal C compiler version 1.2c (June 1989) had only the ANSI headers.
  
  ## Functions
  
  | Name | Description | Notes |
  | - | - | - |
  | execl, execle, execlp, execlpe | load and execute a new child process by placing it in memory previously occupied by the parent process. Parameters are passed individually. | DOS,Win,OS/2,POSIX |
  | execv, execve, execvp, execvpe | load and execute a new child process by placing it in memory previously occupied by the parent process. Parameters are passed as an array of pointers. | DOS,Win,OS/2,POSIX |
  | spawnl, spawnle, spawnlp, spawnlpe | load and execute a new child process. Parameters are passed individually. | DOS,Win,OS/2 |
  | spawnv, spawnve, spawnvp, spawnvpe | load and execute a new child process. Parameters are passed as an array of pointers. | DOS,Win,OS/2 |
  | beginthread, beginthreadNT | creates a new thread of execution within the current process. | Win,OS/2 |
  | endthread | terminates a thread created by beginthread. | Win,OS/2 |
  | getpid | returns the process identifier. | DOS,Win,OS/2 |
  | cexit | restore interrupt vectors altered by the startup code. | DOS,Win,OS/2 |
  
  ## Constants
  
  | Name | Description | Notes | OS |
  | - | - | - | - |
  | _P_WAIT | Suspends parent process until the child process has finished executing. | synchronous spawn. | MS-DOS,Win32,OS/2 |
  | _P_NOWAIT, _P_NOWAITO | Continues to execute calling process concurrently with new process. | asynchronous spawn. | Win32,OS/2 |
  | _P_OVERLAY | Overlays parent process with child, which destroys the parent. | has the same effect as the exec* functions. | MS-DOS,Win32,OS/2 |
  | _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. | Win32,OS/2 |
  | _WAIT_CHILD | used as cwait action. | Obsolete on Win32. | MS-DOS,OS/2 |
  | _WAIT_GRANDCHILD | used as cwait action. | Obsolete on Win32. | MS-DOS,OS/2 |
  
  ## Implementations
  
  Given the fact there is no standard on which to base the implementation, the functions declared by process.h differ, depending on the compiler in use. Below is a list of compilers which provide process.h.
  
  * DJGPP
  * OpenWatcom,
  * Digital Mars
  * MinGW
  * Microsoft Visual C++
  * Borland Turbo C, 2.0 and later
  * Lcc32
  * QNX Neutrino QCC 6.x
  
  ## Differences
  
  Another aspect that might vary is the combined length of exec* and spawn* parameters.
  
  * Delorie DJGPP: does not have such a limit.
  * Digital Mars: the maximum is 128 bytes; nothing is stated about the ending '\0' character.
  * Microsoft cl: the argument list for the new process must not exceed 1024 bytes.
  