There are three primitives that create a new subprocess in which to run
a program. One of them,
start-process, creates an asynchronous
process and returns a process object (see Asynchronous Processes).
The other two,
create a synchronous process and do not return a process object
(see Synchronous Processes). There are various higher-level
functions that make use of these primitives to run particular types of
Synchronous and asynchronous processes are explained in the following sections. Since the three functions are all called in a similar fashion, their common arguments are described here.
In all cases, the function’s program argument specifies the
program to be run. An error is signaled if the file is not found or
cannot be executed. If the file name is relative, the variable
exec-path contains a list of directories to search. Emacs
exec-path when it starts up, based on the value of
the environment variable
PATH. The standard file name
constructs, ‘~’, ‘.’, and ‘..’, are interpreted as
exec-path, but environment variable substitutions
(‘$HOME’, etc.) are not recognized; use
substitute-in-file-name to perform them (see File Name Expansion).
nil in this list refers to
Executing a program can also try adding suffixes to the specified name:
This variable is a list of suffixes (strings) to try adding to the
specified program file name. The list should include
"" if you
want the name to be tried exactly as specified. The default value is
Please note: The argument program contains only the name of the program; it may not contain any command-line arguments. You must use a separate argument, args, to provide those, as described below.
Each of the subprocess-creating functions has a buffer-or-name
argument that specifies where the standard output from the program will
go. It should be a buffer or a buffer name; if it is a buffer name,
that will create the buffer if it does not already exist. It can also
nil, which says to discard the output, unless a custom filter function
handles it. (See Filter Functions, and Read and Print.)
Normally, you should avoid having multiple processes send output to the
same buffer because their output would be intermixed randomly.
For synchronous processes, you can send the output to a file instead
of a buffer.
All three of the subprocess-creating functions have a
argument, args. The args must all be strings, and they are
supplied to program as separate command line arguments. Wildcard
characters and other shell constructs have no special meanings in these
strings, since the strings are passed directly to the specified program.
The subprocess inherits its environment from Emacs, but you can
specify overrides for it with
process-environment. See System Environment. The subprocess gets its current directory from the
The value of this variable is a string, the name of a directory that
contains programs that come with GNU Emacs and are intended for Emacs
to invoke. The program
movemail is an example of such a program;
Rmail uses it to fetch new mail from an inbox.
The value of this variable is a list of directories to search for
programs to run in subprocesses. Each element is either the name of a
directory (i.e., a string), or
nil, which stands for the default
directory (which is the value of
The value of
exec-path is used by
start-process when the program argument is not an absolute
Generally, you should not modify
exec-path directly. Instead,
ensure that your
PATH environment variable is set appropriately
before starting Emacs. Trying to modify
PATH can lead to confusing results.