/usr/lib/swipl/library/process.pl
AllApplicationManualNameSummaryHelp

  • swipl
    • library
      • error.pl -- Error generating support
      • apply.pl -- Apply predicates on a list
      • lists.pl -- List Manipulation
      • debug.pl -- Print debug messages and test assertions
      • broadcast.pl -- Event service
      • socket.pl -- Network socket (TCP and UDP) library
      • predicate_options.pl -- Access and analyse predicate options
      • shlib.pl -- Utility library for loading foreign objects (DLLs, shared objects)
      • option.pl -- Option list processing
      • uid.pl -- User and group management on Unix systems
      • unix.pl -- Unix specific operations
      • syslog.pl -- Unix syslog interface
      • thread_pool.pl -- Resource bounded thread management
      • gensym.pl -- Generate unique symbols
      • settings.pl -- Setting management
      • arithmetic.pl -- Extensible arithmetic
      • main.pl -- Provide entry point for scripts
      • readutil.pl -- Read utilities
      • ssl.pl -- Secure Socket Layer (SSL) library
      • crypto.pl -- Cryptography and authentication library
      • pldoc.pl -- Process source documentation
      • operators.pl -- Manage operators
      • pairs.pl -- Operations on key-value lists
      • prolog_source.pl -- Examine Prolog source-files
      • pengines.pl -- Pengines: Web Logic Programming Made Easy
      • record.pl -- Access compound arguments by name
      • memfile.pl
      • sgml.pl -- SGML, XML and HTML parser
      • quasi_quotations.pl -- Define Quasi Quotation syntax
      • pure_input.pl -- Pure Input from files and streams
      • time.pl -- Time and alarm library
      • uri.pl -- Process URIs
      • solution_sequences.pl -- Modify solution sequences
      • uuid.pl -- Universally Unique Identifier (UUID) Library
      • ordsets.pl -- Ordered set manipulation
      • random.pl -- Random numbers
      • base64.pl -- Base64 encoding and decoding
      • aggregate.pl -- Aggregation operators on backtrackable predicates
      • pcre.pl -- Perl compatible regular expression matching for SWI-Prolog
      • pengines_io.pl -- Provide Prolog I/O for HTML clients
      • sandbox.pl -- Sandboxed Prolog code
      • apply_macros.pl -- Goal expansion rules to avoid meta-calling
      • assoc.pl -- Binary associations
      • prolog_format.pl -- Analyse format specifications
      • yall.pl -- Lambda expressions
      • sha.pl -- SHA secure hashes
      • process.pl -- Create processes and redirect I/O
        • process_create/3
        • process_id/1
        • process_id/2
        • is_process/1
        • process_release/1
        • process_wait/2
        • process_wait/3
        • process_kill/1
        • process_kill/2
        • process_group_kill/1
        • process_group_kill/2
        • process_set_method/1
      • filesex.pl -- Extended operations on files
      • zlib.pl -- Zlib wrapper for SWI-Prolog
      • bdb.pl -- Berkeley DB interface
      • hash_stream.pl -- Maintain a hash on a stream
      • md5.pl -- MD5 hashes
      • porter_stem.pl
      • csv.pl -- Process CSV (Comma-Separated Values) data
      • pprint.pl -- Pretty Print Prolog terms
      • atom.pl -- Operations on atoms
      • ctypes.pl -- Character code classification
      • modules.pl -- Module utility predicates
      • occurs.pl -- Finding and counting sub-terms
      • prolog_xref.pl -- Prolog cross-referencer data collection
      • prolog_colour.pl -- Prolog syntax colouring support.
      • lazy_lists.pl -- Lazy list handling
      • prolog_code.pl -- Utilities for reasoning about code
      • ugraphs.pl -- Graph manipulation library
      • xpath.pl -- Select nodes in an XML DOM
      • iostream.pl -- Utilities to deal with streams
      • doc_http.pl -- Documentation server
      • url.pl -- Analysing and constructing URL
      • www_browser.pl -- Open a URL in the users browser
      • prolog_pack.pl -- A package manager for Prolog
      • prolog_config.pl -- Provide configuration information
      • git.pl -- Run GIT commands
      • utf8.pl -- UTF-8 encoding/decoding on lists of character codes.
      • crypt.pl
      • dialect.pl -- Support multiple Prolog dialects
      • persistency.pl -- Provide persistent dynamic predicates
      • strings.pl -- String utilities
      • dif.pl -- The dif/2 constraint
      • edinburgh.pl -- Some traditional Edinburgh predicates
      • ansi_term.pl -- Print decorated text to ANSI consoles
      • terms.pl -- Term manipulation
      • listing.pl -- List programs and pretty print clauses
      • prolog_stack.pl -- Examine the Prolog stack
      • prolog_clause.pl -- Get detailed source-information about a clause
      • prolog_breakpoints.pl -- Manage Prolog break-points
      • wfs.pl -- Well Founded Semantics interface
      • mallocinfo.pl -- Memory allocation details
      • chr.pl
      • sort.pl
      • dicts.pl -- Dict utilities
      • varnumbers.pl -- Utilities for numbered terms
      • nb_set.pl -- Non-backtrackable sets
      • tables.pl -- XSB interface to tables
      • base32.pl -- Base32 encoding and decoding
      • charsio.pl -- I/O on Lists of Character Codes
      • codesio.pl -- I/O on Lists of Character Codes
      • coinduction.pl -- Co-Logic Programming
      • date.pl -- Process dates and times
      • heaps.pl -- heaps/priority queues
      • rbtrees.pl -- Red black trees
      • statistics.pl -- Get information about resource usage
      • when.pl -- Conditional coroutining
      • backcomp.pl -- Backward compatibility
      • prolog_stream.pl -- A stream with Prolog callbacks
      • editline.pl -- BSD libedit based command line editing
      • term_to_json.pl
      • help.pl -- Text based manual
      • archive.pl -- Access several archive formats
      • doc_latex.pl -- PlDoc LaTeX backend
      • stomp.pl -- STOMP client.
      • intercept.pl -- Intercept and signal interface
      • odbc.pl
      • redis.pl -- Redis client
      • unicode.pl -- Unicode string handling
      • udp_broadcast.pl -- A UDP broadcast proxy
      • table.pl
      • protobufs.pl -- Google's Protocol Buffers ("protobufs")
      • isub.pl -- isub: a string similarity measure
      • thread.pl -- High level thread primitives
      • plunit.pl -- Unit Testing
      • mqi.pl
      • make.pl -- Reload modified source files
      • rdf_write.pl -- Write RDF/XML from a list of triples
      • rdf.pl -- RDF/XML parser
      • redis_streams.pl -- Using Redis streams
      • snowball.pl -- The Snowball multi-lingual stemmer library
      • threadutil.pl -- Interactive thread utilities
      • paxos.pl -- A Replicated Data Store
      • cgi.pl -- Read CGI parameters
      • increval.pl -- Incremental dynamic predicate modification
      • sgml_write.pl -- XML/SGML writer module
      • double_metaphone.pl -- Phonetic string matching
      • edit.pl -- Editor interface
      • quintus.pl -- Quintus compatibility
      • writef.pl -- Old-style formatted write
      • prolog_trace.pl -- Print access to predicates
      • shell.pl -- Elementary shell commands
      • prolog_debug.pl -- User level debugging tools
      • xmlenc.pl -- XML encryption library
      • prolog_jiti.pl -- Just In Time Indexing (JITI) utilities
      • streampool.pl -- Input multiplexing
      • fastrw.pl -- Fast reading and writing of terms
      • check.pl -- Consistency checking
      • portray_text.pl -- Portray text
      • optparse.pl -- command line parsing
      • files.pl
      • system.pl -- System utilities
      • prolog_codewalk.pl -- Prolog code walker
      • prolog_metainference.pl -- Infer meta-predicate properties
      • hashtable.pl -- Hash tables
      • qsave.pl -- Save current program as a state or executable
      • zip.pl -- Access resource ZIP archives
      • c14n2.pl -- C14n2 canonical XML documents
      • prolog_wrap.pl -- Wrapping predicates
      • doc_files.pl -- Create stand-alone documentation files
      • xmldsig.pl -- XML Digital signature
      • prolog_autoload.pl -- Autoload all dependencies
      • prolog_history.pl -- Per-directory persistent commandline history
      • rlimit.pl
      • test_cover.pl -- Clause coverage analysis
      • explain.pl -- Describe Prolog Terms
      • readline.pl -- GNU readline interface
      • oset.pl -- Ordered set manipulation
      • yaml.pl -- Process YAML data
      • rdf_triple.pl -- Create triples from intermediate representation
      • pwp.pl -- Prolog Well-formed Pages
      • rdf_parser.pl
      • rewrite_term.pl
      • prolog_versions.pl -- Demand specific Prolog versions
      • xsdp_types.pl -- XML-Schema primitive types
 process_create(+Exe, +Args:list, +Options) is det
Create a new process running the file Exe and using arguments from the given list. Exe is a file specification as handed to absolute_file_name/3. Typically one use the path file alias to specify an executable file on the current PATH. Args is a list of arguments that are handed to the new process. On Unix systems, each element in the list becomes a separate argument in the new process. In Windows, the arguments are simply concatenated to form the commandline. Each argument itself is either a primitive or a list of primitives. A primitive is either atomic or a term file(Spec). Using file(Spec), the system inserts a filename using the OS filename conventions which is properly quoted if needed.

Options:

stdin(Spec)
stdout(Spec)
stderr(Spec)
Bind the standard streams of the new process. Spec is one of the terms below. If pipe(Pipe) is used, the Prolog stream is a stream in text-mode using the encoding of the default locale. The encoding can be changed using set_stream/2, or by using the two-argument form of pipe, which accepts an encoding(Encoding) option. The options stdout and stderr may use the same stream, in which case both output streams are connected to the same Prolog stream.
std
Just share with the Prolog I/O streams. On Unix, if the user_input, etc. are bound to a file handle but not to 0,1,2 the process I/O is bound to the file handles of these streams.
null
Bind to a null stream. Reading from such a stream returns end-of-file, writing produces no output
pipe(-Stream)
pipe(-Stream, +StreamOptions)
Attach input and/or output to a Prolog stream. The optional StreamOptions argument is a list of options that affect the stream. Currently only the options type(+Type) and encoding(+Encoding) are supported, which have the same meaning as the stream properties of the same name (see stream_property/2). StreamOptions is provided mainly for SICStus compatibility - the SWI-Prolog predicate set_stream/2 can be used for the same purpose.
stream(+Stream)
Attach input or output to an existing Prolog stream. This stream must be associated with an OS file handle (see stream_property/2, property file_no). This option is not provided by the SICStus implementation.
cwd(+Directory)
Run the new process in Directory. Directory can be a compound specification, which is converted using absolute_file_name/3. See also process_set_method/1.
env(+List)
As environment(List), but only the specified variables are passed, i.e., no variables are inherited.
environment(+List)
Specify additional environment variables for the new process. List is a list of Name=Value terms, where Value is expanded the same way as the Args argument. If neither env nor environment is passed the environment is inherited from the Prolog process. At most one env(List) or environment(List) term may appear in the options. If multiple appear a permission_error is raised for the second option.
process(-PID)
Unify PID with the process id of the created process.
detached(+Bool)
In Unix: If true, detach the process from the terminal Currently mapped to setsid(); Also creates a new process group for the child In Windows: If true, detach the process from the current job via the CREATE_BREAKAWAY_FROM_JOB flag. In Vista and beyond, processes launched from the shell directly have the 'compatibility assistant' attached to them automatically unless they have a UAC manifest embedded in them. This means that you will get a permission denied error if you try and assign the newly-created PID to a job you create yourself.
window(+Bool)
If true, create a window for the process (Windows only)
priority(+Priority)
In Unix: specifies the process priority for the newly created process. Priority must be an integer between -20 and 19. Positive values are nicer to others, and negative values are less so. The default is zero. Users are free to lower their own priority. Only the super-user may raise it to less-than zero.

If the user specifies the process(-PID) option, he must call process_wait/2 to reclaim the process. Without this option, the system will wait for completion of the process after the last pipe stream is closed.

If the process is not waited for, it must succeed with status 0. If not, an process_error is raised.

Windows notes

On Windows this call is an interface to the CreateProcess() API. The commandline consists of the basename of Exe and the arguments formed from Args. Arguments are separated by a single space. If all characters satisfy iswalnum() it is unquoted. If the argument contains a double-quote it is quoted using single quotes. If both single and double quotes appear a domain_error is raised, otherwise double-quote are used.

The CreateProcess() API has many options. Currently only the CREATE_NO_WINDOW options is supported through the window(+Bool) option. If omitted, the default is to use this option if the application has no console. Future versions are likely to support more window specific options and replace win_exec/2.

Examples

First, a very simple example that behaves the same as shell('ls -l'), except for error handling:

?- process_create(path(ls), ['-l'], []).

The following example uses grep to find all matching lines in a file.

grep(File, Pattern, Lines) :-
        setup_call_cleanup(
            process_create(path(grep), [ Pattern, file(File) ],
                           [ stdout(pipe(Out))
                           ]),
            read_lines(Out, Lines),
            close(Out)).

read_lines(Out, Lines) :-
        read_line_to_codes(Out, Line1),
        read_lines(Line1, Out, Lines).

read_lines(end_of_file, _, []) :- !.
read_lines(Codes, Out, [Line|Lines]) :-
        atom_codes(Line, Codes),
        read_line_to_codes(Out, Line2),
        read_lines(Line2, Out, Lines).
Errors
- process_error(Exe, Status) where Status is one of exit(Code) or killed(Signal). Raised if the process is waited for (i.e., Options does not include process(-PID)), and does not exit with status 0.
bug
- On Windows, environment(List) is handled as env(List), i.e., the environment is not inherited.