# `process`

This library provides a portable abstraction over process handling predicates found in some backend Prolog systems. Currently supports ECLiPSe, GNU Prolog, SICStus Prolog, SWI-Prolog, Trealla Prolog, and XVM.

## API documentation

Open the ../../docs/library_index.html#process link in a web browser.

## Loading

To load all entities in this library, load the `loader.lgt` file:

    | ?- logtalk_load(process(loader)).

## Testing

To test this library predicates, load the `tester.lgt` file:

    | ?- logtalk_load(process(tester)).

## Usage

The `process` object provides the following predicates for portable process handling:

- `create(Executable, Arguments, Options)` - Creates a new process

- `wait(Process, Status)` - Waits for a process to terminate

- `kill(Process, Signal)` - Terminates a process with a specific signal

- `kill(Process)` - Terminates a process using the default signal (SIGKILL)

The `create/3` predicate supports the following options:

- `process(Pid)` - Unifies Pid with the process identifier (an opaque ground term)

- `stdin(Stream)` - Binds Stream to the process standard input

- `stdout(Stream)` - Binds Stream to the process standard output

- `stderr(Stream)` - Binds Stream to the process standard error

Note: Process identifiers (PIDs) should be treated as opaque ground terms. Their internal representation varies between backend Prolog systems.

Example:

    | ?- process::create('/bin/echo', ['hello.'], [stdout(Out), process(PID)]),
         read_term(Out, Term, []),
         close(Out).
    Out = ..., PID = ..., Term = hello.