/**
* Run-time process information
*/
module system/posix/process
imports
system/posix/signal
util/config/verbose
system/io/file
system/io/dir
system/io/char
system/io/term
strategies
/**
* The setenv() function adds the variable name to the
* environment with the value value, if name does not already
* exist. If name does exist in the environment, then its
* value is changed to value if overwrite is non-zero; if
* overwrite is zero, then the value of name is not changed.
*/
setenv =
?(name, value, overwrite)
; where(prim("SSL_setenv", name, value, overwrite))
strategies
/**
* Return process identifier of current process
*
* @type _ -> Int
*/
get-pid =
prim("SSL_get_pid")
/**
* Process creation
*/
strategies
/**
* Creates a child process almost equivalent to the parent process.
*
* The new process differs from the parent process
* only in its PID and PPID, and in the fact that resource
* utilizations are set to 0. File locks and pending signals are not
* inherited.
*
* Fails if forking fails, in which case no child process is created.
* On success, the PID of the child process is returned in the parent’s
* thread of execution, and a 0 is returned in the child’s thread of exe‐
* cution.
*
* @type fork :: a -> Int
*/
fork =
prim("SSL_fork")
/**
* Replaces the current process image with a new process image.
*
* @see man execvp
* @warning The first arugment is added in the runtime.
*/
execvp =
?(file, argv)
; prim("SSL_execvp", file, argv)
; where(<conc-strings; perror; fail> ("SSL/execvp: Cannot execute file ", file))
/**
* Replaces the current process image with a new process image.
*
* @see man execv
* @warning The first arugment is not added in the runtime.
* @warning If the
*/
execv =
?(file, argv)
; prim("SSL_execv", file, argv)
; where(<conc-strings; perror; fail> ("SSL/execv: Cannot execute file ", file))
/**
* Process termination
*/
strategies
/**
* @type Int -> WaitStatus
*/
waitpid =
?pid; prim("SSL_waitpid", pid)
signature
constructors
/**
* Collects the information returned from a wait call.
*
* (1) Exit status or -1 if process did not terminate properly
* (2) Signal number or -1 if the process wasn't terminated because of a signal
* (3) Signal number or -1 if the process wasn't stopped
*/
WaitStatus : Int * Int * Int -> WaitStatus
/**
* Terminating Another Process
*/
strategies
/**
* Sends the specified signal to the specified process.
*
* @fail fails on failure of the kill invocation
* @type Int * Signal -> Int * Signal
*/
kill =
where(
?(pid, <number-from-signal; ?sig>)
; prim("SSL_kill", pid, sig)
)