.fp 5 CW .de Af .ds ;G \\*(;G\\f\\$1\\$3\\f\\$2 .if !\\$4 .Af \\$2 \\$1 "\\$4" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9" .. .de aF .ie \\$3 .ft \\$1 .el \{\ .ds ;G \& .nr ;G \\n(.f .Af "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9" \\*(;G .ft \\n(;G \} .. .de L .aF 5 \\n(.f "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7" .. .de LR .aF 5 1 "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7" .. .de RL .aF 1 5 "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7" .. .de EX \" start example .ta 1i 2i 3i 4i 5i 6i .PP .RS .PD 0 .ft 5 .nf .. .de EE \" end example .fi .ft .PD .RE .PP .. .TH SPAWNVEG 3 .SH NAME spawnveg \- process spawn with process group and session control .SH SYNOPSIS .L "#include " .sp .L "int spawnveg(const char* command, char** argv, char** envv, pid_t pgid);" .SH DESCRIPTION .L spwanveg combines .IR fork (2), .IR exec (2), .IR setpgid (2) and .IR setsid (2) into a single call. .PP .LR command , .L argv and .L envv are as in .IR execve (2). .L pgid controls the new process group and session: .TP .L <0 The new process becomes a session leader. is called in the child context. .TP .L 0 The new process is in the callers process group. .TP .L 1 The new process becomes a process group leader. .TP .L >1 The new process joins the process group .IR pgid . .SH COMMENTS It is possible to code all process creation (except for .IR vfork (2) hack like in .IR csh (1)) using .LR spawnveg . The .IR proc (3) routines and .IR ksh (1) do this on systems that don't support .IR fork (2). This makes porting to NT and Windows a snap: a simple .IR iffe (1) probe provides a .L spawnveg implementation using the NT or Windows process primitives. .SH "SEE ALSO" fork(2), exec(2), setpgid(2), setsid(2), spawnve(2)