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 processwait(Process, Status)- Waits for a process to terminatekill(Process, Signal)- Terminates a process with a specific signalkill(Process)- Terminates a process using the default signal (SIGKILL)
Exit status depends on the backend. For a successfully terminated
process, Status is either 0 or exit(0). For unsuccessful
processes, Status cannot be sensibly abstracted. Consult the backens
documentation for the details.
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 inputstdout(Stream)- Binds Stream to the process standard outputstderr(Stream)- Binds Stream to the process standard errortype(Type)- Sets the type (binaryortext) of thestdin/1andstdout/1streams
Process identifiers (PIDs) should be treated as opaque ground terms. Their internal representation varies between backend Prolog systems.
The type/1 option is ignored on ECLiPSe, GNU Prolog, and XVM as
these systems don’t provide the necessary support to set the streams
type at process creation.
Example:
| ?- process::create('/bin/echo', ['hello.'], [stdout(Out), process(PID)]),
read_term(Out, Term, []),
close(Out).
Out = ..., PID = ..., Term = hello.