NAME
proc - process control routines
SYNOPSIS
#include <proc.h> Proc_t* procopen(const char* command, char** argv, char** envv, long* opv, long flags); int procfree(Proc_t* proc); int procclose(Proc_t* proc); int procrun(const char* command, char** argv);
DESCRIPTION
These routines provide a portable interface to process creation and execution. They work on systems with fork(2) and exec(2) as well as on systems with only spawnve(2) or spanwveg(3).
$1$2procopenprocopenprocopenprocopenprocopenprocopenprocopenprocopen runs command with arguments argv, environment modifications in envv, file descriptor, signal and process group operations in opv and flags in flags.
command is searched for using the $1$2PATHPATHPATHPATHPATHPATHPATHPATH environment variable from the calling environment. If command is $1$200000000 then the current shell is used (see pathshell(3)). If envv is not $1$200000000 then it is a $1$200000000 terminated vector of name[=value] strings that are added to the command environment using setenviron(3). If name appears in the parent environment then its value is replaced with the new value. If =value is omitted then name is removed from the child environment. The $1$2________ environment variable is set to contain the pathname for command and will appear at the top of the child environment.
If opv is not $1$200000000 then it is a 0 terminaled vector of operations to perform. In the following context is a combination of $1$2PROC_FD_CHILDPROC_FD_CHILDPROC_FD_CHILDPROC_FD_CHILDPROC_FD_CHILDPROC_FD_CHILDPROC_FD_CHILDPROC_FD_CHILD and $1$2PROC_FD_PARENTPROC_FD_PARENTPROC_FD_PARENTPROC_FD_PARENTPROC_FD_PARENTPROC_FD_PARENTPROC_FD_PARENTPROC_FD_PARENT for the child and parent process context respectively. Valid operations are:
- PROC_FD_CLOSE(fd,context)
-
The file descriptor fd is closed in context.
- PROC_FD_DUP(from,to,context)
-
The file descriptor from is dup(2)'d into the file descriptor to in context.
- PROC_SIG_DFL(sig)
-
The signal handler for sig is set to $1$2SIG_DFLSIG_DFLSIG_DFLSIG_DFLSIG_DFLSIG_DFLSIG_DFLSIG_DFL in the child context.
- PROC_SIG_IGN(sig)
-
The signal handler for sig is set to $1$2SIG_IGNSIG_IGNSIG_IGNSIG_IGNSIG_IGNSIG_IGNSIG_IGNSIG_IGN in the child context.
- PROC_SYS_PGRP(pgid)
-
The child process group is set to pgid. pgid may have the following values:
- $1$2<0<0<0<0<0<0<0<0
-
The child process becomes a session leader.
- $1$200000000
-
The child process is in the parent process group.
- $1$211111111
-
The child process becomes a process group leader.
- $1$2>1>1>1>1>1>1>1>1
-
The child process joins the process group pgid.
- PROC_SYS_UMASK(mask)
-
The child process group file creation mask is set to mask.
flags is the inclusive-or of the following:
- $1$2PROC_ARGMODPROC_ARGMODPROC_ARGMODPROC_ARGMODPROC_ARGMODPROC_ARGMODPROC_ARGMODPROC_ARGMOD
-
argv[-1] and argv[0] may be modified. This is an optimization that avoids an environment vector realloc(3) when command is a shell script.
- $1$2PROC_BACKGROUNDPROC_BACKGROUNDPROC_BACKGROUNDPROC_BACKGROUNDPROC_BACKGROUNDPROC_BACKGROUNDPROC_BACKGROUNDPROC_BACKGROUND
-
Standard shell $1$2&&&&&&&& setup is done for the child process.
- $1$2PROC_CLEANUPPROC_CLEANUPPROC_CLEANUPPROC_CLEANUPPROC_CLEANUPPROC_CLEANUPPROC_CLEANUPPROC_CLEANUP
-
Parent process redirection file discriptors are closed on error.
- $1$2PROC_DAEMONPROC_DAEMONPROC_DAEMONPROC_DAEMONPROC_DAEMONPROC_DAEMONPROC_DAEMONPROC_DAEMON
-
Standard daemon setup is done for the child process.
- $1$2PROC_ENVCLEARPROC_ENVCLEARPROC_ENVCLEARPROC_ENVCLEARPROC_ENVCLEARPROC_ENVCLEARPROC_ENVCLEARPROC_ENVCLEAR
-
The child environment is cleared before envv is added.
- $1$2PROC_GIDPROC_GIDPROC_GIDPROC_GIDPROC_GIDPROC_GIDPROC_GIDPROC_GID
-
The child effective group id is set to the real group id.
- $1$2PROC_IGNOREPROC_IGNOREPROC_IGNOREPROC_IGNOREPROC_IGNOREPROC_IGNOREPROC_IGNOREPROC_IGNORE
-
Parent pipe errors are ignored.
- $1$2PROC_OVERLAYPROC_OVERLAYPROC_OVERLAYPROC_OVERLAYPROC_OVERLAYPROC_OVERLAYPROC_OVERLAYPROC_OVERLAY
-
The current process is overlayed by command if possible (i.e., the fork(2) call is omitted).
- $1$2PROC_PARANOIDPROC_PARANOIDPROC_PARANOIDPROC_PARANOIDPROC_PARANOIDPROC_PARANOIDPROC_PARANOIDPROC_PARANOID
-
Paranoid: command is searched using the default standard $1$2PATHPATHPATHPATHPATHPATHPATHPATH the child environment variable $1$2PATHPATHPATHPATHPATHPATHPATHPATH is set to the default standard; the $1$2PROC_GIDPROC_GIDPROC_GIDPROC_GIDPROC_GIDPROC_GIDPROC_GIDPROC_GID and $1$2PROC_UIDPROC_UIDPROC_UIDPROC_UIDPROC_UIDPROC_UIDPROC_UIDPROC_UID modes are set; only $1$2/bin/sh/bin/sh/bin/sh/bin/sh/bin/sh/bin/sh/bin/sh/bin/sh is used to execute command if it is a shell script.
- $1$2PROC_PRIVELEGEDPROC_PRIVELEGEDPROC_PRIVELEGEDPROC_PRIVELEGEDPROC_PRIVELEGEDPROC_PRIVELEGEDPROC_PRIVELEGEDPROC_PRIVELEGED
-
If the effective user id is $1$200000000 then the child real user id is set to $1$200000000 and the child real group id is set to the effective group id.
- $1$2PROC_READPROC_READPROC_READPROC_READPROC_READPROC_READPROC_READPROC_READ
-
proc.rfd is connected to command's standard output.
- $1$2PROC_SESSIONPROC_SESSIONPROC_SESSIONPROC_SESSIONPROC_SESSIONPROC_SESSIONPROC_SESSIONPROC_SESSION
-
The child process becomes a session group leader. (Equivalent to the opv entry $1$2PROC_SYS_PGRP(-1)PROC_SYS_PGRP(-1)PROC_SYS_PGRP(-1)PROC_SYS_PGRP(-1)PROC_SYS_PGRP(-1)PROC_SYS_PGRP(-1)PROC_SYS_PGRP(-1)PROC_SYS_PGRP(-1)
- $1$2PROC_UIDPROC_UIDPROC_UIDPROC_UIDPROC_UIDPROC_UIDPROC_UIDPROC_UID
-
The child effective user id is set to the real user id.
- $1$2PROC_WRITEPROC_WRITEPROC_WRITEPROC_WRITEPROC_WRITEPROC_WRITEPROC_WRITEPROC_WRITE
-
proc.wfd is connected to commands's standard input.
The return value is a pointer to a structure with the following members:
- $1$2pid_t pidpid_t pidpid_t pidpid_t pidpid_t pidpid_t pidpid_t pidpid_t pid
-
The child process id.
- $1$2pid_t pgrppid_t pgrppid_t pgrppid_t pgrppid_t pgrppid_t pgrppid_t pgrppid_t pgrp
-
The child process group.
- $1$2int rfdint rfdint rfdint rfdint rfdint rfdint rfdint rfd
-
A read file descriptor connected to command's standard output.
- $1$2int wfdint wfdint wfdint wfdint wfdint wfdint wfdint wfd
-
A write file descriptor connected to command's standard input.
If an error occurs then $1$200000000 is returned.
$1$2proccloseproccloseproccloseproccloseproccloseproccloseproccloseprocclose waits for the process proc to complete and then closes the command stream proc. The command exit status is returned. $1$2-1-1-1-1-1-1-1-1 is returned if the child portion of $1$2procopenprocopenprocopenprocopenprocopenprocopenprocopenprocopen failed.
$1$2procfreeprocfreeprocfreeprocfreeprocfreeprocfreeprocfreeprocfree frees the process stream without waiting for command to complete. Presumably some other mechanism will be used to wait for proc.pid.
$1$2procrunprocrunprocrunprocrunprocrunprocrunprocrunprocrun combines $1$2procopenprocopenprocopenprocopenprocopenprocopenprocopenprocopen and $1$2proccloseproccloseproccloseproccloseproccloseproccloseproccloseprocclose with the flags $1$2PROC_GID|PROC_UIDPROC_GID|PROC_UIDPROC_GID|PROC_UIDPROC_GID|PROC_UIDPROC_GID|PROC_UIDPROC_GID|PROC_UIDPROC_GID|PROC_UIDPROC_GID|PROC_UID and returns the command exit status.
SEE ALSO
popen(3), sfpopen(3), spawnveg(3), system(3)