|Did you know ...||Search Documentation:|
|unix.pl -- Unix specific operations|
The library(unix) library provides the commonly used Unix primitives to deal with process management. These primitives are useful for many tasks, including server management, parallel computation, exploiting and controlling other processes, etc.
The predicates in this library are modelled closely after their native Unix counterparts.
fork() is the only way to create new processes and fork/1
is a simple direct interface to it.
fork_exec(Command) :- ( fork(child) -> exec(Command) ; true ).
execvp(). Here are some examples:
exec() is the only way to start an executable file
executing. It is commonly used together with fork/1. For example
to start netscape on an URL in the background, do:
run_netscape(URL) :- ( fork(child), exec(netscape(URL)) ; true ).
Using this code, netscape remains part of the process-group of the invoking Prolog process and Prolog does not wait for netscape to terminate. The predicate wait/2 allows waiting for a child, while detach_IO/0 disconnects the child as a deamon process.
exited(ExitCode)if the child with pid Pid was terminated by calling
exit()(Prolog halt/1). ExitCode is the return status. Status is unified with
signaled(Signal)if the child died due to a software interrupt (see kill/2). Signal contains the signal number. Finally, if the process suspended execution due to a signal, Status is unified with
SIGprefix and mapping to lowercase. E.g.
intis the same as
SIGINTin C. The meaning of the signal numbers can be found in the Unix manual.
:- use_module(library(unix)). fork_demo(Result) :- pipe(Read, Write), fork(Pid), ( Pid == child -> close(Read), format(Write, '~q.~n', [hello(world)]), flush_output(Write), halt ; close(Write), read(Read, Result), close(Read) ).
dup2(), copying the underlying filedescriptor and thus making both streams point to the same underlying object. This is normally used together with fork/1 and pipe/2 to talk to an external program that is designed to communicate using standard I/O.
Both FromStream and ToStream either refer to a Prolog stream or
an integer descriptor number to refer directly to OS
descriptors. See also
demo/pipe.pl in the source-distribution of
user_errorare closed if they are connected to a terminal (see
ttyproperty in stream_property/2). Input streams are rebound to a dummy stream that returns EOF. Output streams are reboud to forward their output to Stream.
setsid()if provided or using
To ignore all output, it may be rebound to a null stream. For example:
..., open_null_stream(Out), detach_IO(Out).
The detach_IO/1 should be called only once per process. Subsequent calls silently succeed without any side effects.
/tmp/pl-out.<pid>. Output is line buffered (see set_stream/2).
sysconf(1)for details. Conf is a term Config(Value), where Value is always an integer. Config is the
sysconf()name after removing =_SC_= and conversion to lowercase. Currently support the following configuration info:
nprocessors_onln. Note that not all values may be supported on all operating systems.
The following predicates are exported, but not or incorrectly documented.