add documentation

This commit is contained in:
Bennet Bleßmann
2025-07-26 13:30:56 +02:00
committed by Bennet Bleßmann
parent dc495f10f8
commit 1120bcde29

View File

@@ -10,6 +10,37 @@
:- use_module(library(iso_ext)).
:- use_module(library(lists), [append/3, member/2, maplist/2, maplist/3, select/3]).
%% process_create(+Exe, +Args:list, +Options).
%
% Create a new process by executing the executable Exe and passing it the Arguments Args.
%
% Note: On windows please take note of [windows argument splitting](https://doc.rust-lang.org/std/process/index.html#windows-argument-splitting).
%
% Options is a list consisting of the following options:
%
% * `cwd(+Path)` Set the processes working directory to `Path`
% * `process(-Pid)` `Pid` will be assigned the spawned processes process id
% * `env(+List)` Don't inherit environment variables and set the variables defined in `List`
% * `environment(+List)` Inherit environment variables and set/override the variables defined in `List`
% * `stdin(Spec)`, `stdout(Spec)` or `stderr(Spec)` defines how to redirect the spawned processes io streams
%
% The elements of `List` in `env(List)`/`environment(List)` List must be string pairs using `=/2`.
% `env/1` and `environment/1` may not be both specified.
%
% The following stdio `Spec` are available:
%
% * `std` inherit the current processes original stdio streams (does currently not account for stdio being changed by `set_input` or `set_output`)
% * `file(+Path)` attach the strea to the file at `Path`
% * `null` discards writes and behaves as eof for read. Equivalent to using `file(/dev/null)`
% * `pipe(-Steam)` create a new pipe and assigne one end to the created process and the other end to `Stream`
%
% Specifying an option multiple times is an error, when an option is not specified the following defaults apply:
%
% - `cwd(".")`
% - `environment([])`
% - `stdin(std)`, `stdout(std)`, `stderr(std)`
%
process_create(Exe, Args, Options) :-
must_be(chars, Exe),
must_be(list, Args),
@@ -33,8 +64,32 @@ process_create(Exe, Args, Options) :-
simplify_env(Env, Env1),
'$process_create'(Exe, Args, Stdin1, Stdout1, Stderr1, Env1, Cwd, Pid).
%% process_wait(+Pid, Status).
%
% See `process_create/3` with `Options = []`
%
process_wait(Pid, Status) :- process_wait(Pid, Status, []).
%% process_wait(+Pid, Status, Options).
%
% Wait for the child process with `Pid` to exit.
%
% Only works for processes spawned with `process_create/3` that have not yet been release with `process_release/1`
%
% When the process exits regulary `Status` will be unified with `exit(Exit)` where `Exit` is the processes exit code.
% When the process exits was killed `Status` will be unified with `killed(Signal)` where `Signal` is the signal number that killed the process.
% When the process doesn't exit before the timeout `Status` will be unified with `timeout`.
%
% `Options` is a a list of the following options
%
% * timeout(Timeout) supported values for `Timeout` are 0 or `infinite`
%
% Each options may be specified at most once, when an option is not specified the following defaults apply:
%
% - timeout(infinite)
%
process_wait(Pid, Status, Options) :-
must_be(integer, Pid),
must_be_known_options([timeout], [], Options),check_options(
@@ -49,10 +104,26 @@ process_wait(Pid, Status, Options) :-
valid_timeout(timeout(infinite)).
valid_timeout(timeout(0)).
%% process_kill(+Pid).
%
% Kill the child process identified by `Pid`.
% On Unix this sends SIGKILL.
%
% Only works for processes spawned with `process_create/3` that have not yet been release with `process_release/1`
%
process_kill(Pid) :-
must_be(integer, Pid),
'$process_kill'(Pid).
%% process_release(+Pid)
%
% release child process object of the process identified by `Pid`
%
% It's an error if
% * the `Pid` is not associated with a child process created by `process_create/3`,
% * the child project object has already been released
%
process_release(Pid) :-
process_wait(Pid, _),
'$process_release'(Pid).