2 @c This is part of the XEmacs Lisp Reference Manual.
3 @c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
4 @c See the file lispref.texi for copying conditions.
5 @setfilename ../../info/processes.info
6 @node Processes, System Interface, Databases, Top
13 In the terminology of operating systems, a @dfn{process} is a space in
14 which a program can execute. XEmacs runs in a process. XEmacs Lisp
15 programs can invoke other programs in processes of their own. These are
16 called @dfn{subprocesses} or @dfn{child processes} of the XEmacs process,
17 which is their @dfn{parent process}.
19 A subprocess of XEmacs may be @dfn{synchronous} or @dfn{asynchronous},
20 depending on how it is created. When you create a synchronous
21 subprocess, the Lisp program waits for the subprocess to terminate
22 before continuing execution. When you create an asynchronous
23 subprocess, it can run in parallel with the Lisp program. This kind of
24 subprocess is represented within XEmacs by a Lisp object which is also
25 called a ``process''. Lisp programs can use this object to communicate
26 with the subprocess or to control it. For example, you can send
27 signals, obtain status information, receive output from the process, or
30 @defun processp object
31 This function returns @code{t} if @var{object} is a process,
36 * Subprocess Creation:: Functions that start subprocesses.
37 * Synchronous Processes:: Details of using synchronous subprocesses.
38 * MS-DOS Subprocesses:: On MS-DOS, you must indicate text vs binary
39 for data sent to and from a subprocess.
40 * Asynchronous Processes:: Starting up an asynchronous subprocess.
41 * Deleting Processes:: Eliminating an asynchronous subprocess.
42 * Process Information:: Accessing run-status and other attributes.
43 * Input to Processes:: Sending input to an asynchronous subprocess.
44 * Signals to Processes:: Stopping, continuing or interrupting
45 an asynchronous subprocess.
46 * Output from Processes:: Collecting output from an asynchronous subprocess.
47 * Sentinels:: Sentinels run when process run-status changes.
48 * Process Window Size:: Changing the logical window size of a process.
49 * Transaction Queues:: Transaction-based communication with subprocesses.
50 * Network:: Opening network connections.
53 @node Subprocess Creation
54 @section Functions that Create Subprocesses
56 There are three functions that create a new subprocess in which to run
57 a program. One of them, @code{start-process}, creates an asynchronous
58 process and returns a process object (@pxref{Asynchronous Processes}).
59 The other two, @code{call-process} and @code{call-process-region},
60 create a synchronous process and do not return a process object
61 (@pxref{Synchronous Processes}).
63 Synchronous and asynchronous processes are explained in the following
64 sections. Since the three functions are all called in a similar
65 fashion, their common arguments are described here.
67 @cindex execute program
68 @cindex @code{PATH} environment variable
69 @cindex @code{HOME} environment variable
70 In all cases, the function's @var{program} argument specifies the
71 program to be run. An error is signaled if the file is not found or
72 cannot be executed. If the file name is relative, the variable
73 @code{exec-path} contains a list of directories to search. Emacs
74 initializes @code{exec-path} when it starts up, based on the value of
75 the environment variable @code{PATH}. The standard file name
76 constructs, @samp{~}, @samp{.}, and @samp{..}, are interpreted as usual
77 in @code{exec-path}, but environment variable substitutions
78 (@samp{$HOME}, etc.) are not recognized; use
79 @code{substitute-in-file-name} to perform them (@pxref{File Name
82 Each of the subprocess-creating functions has a @var{buffer-or-name}
83 argument which specifies where the standard output from the program will
84 go. If @var{buffer-or-name} is @code{nil}, that says to discard the
85 output unless a filter function handles it. (@xref{Filter Functions},
86 and @ref{Read and Print}.) Normally, you should avoid having multiple
87 processes send output to the same buffer because their output would be
90 @cindex program arguments
91 All three of the subprocess-creating functions have a @code{&rest}
92 argument, @var{args}. The @var{args} must all be strings, and they are
93 supplied to @var{program} as separate command line arguments. Wildcard
94 characters and other shell constructs are not allowed in these strings,
95 since they are passed directly to the specified program.
97 @strong{Please note:} The argument @var{program} contains only the
98 name of the program; it may not contain any command-line arguments. You
99 must use @var{args} to provide those.
101 If you want to use features of the shell, then invoke the shell directly
102 using, for example, @var{program} of @code{"sh"}, and @var{args} of
103 @code{"-c"} and @var{"command line..."}.
105 The subprocess gets its current directory from the value of
106 @code{default-directory} (@pxref{File Name Expansion}).
108 @cindex environment variables, subprocesses
109 The subprocess inherits its environment from XEmacs; but you can
110 specify overrides for it with @code{process-environment}. @xref{System
113 @defvar exec-directory
115 The value of this variable is the name of a directory (a string) that
116 contains programs that come with XEmacs, that are intended for XEmacs
117 to invoke. The program @code{wakeup} is an example of such a program;
118 the @code{display-time} command uses it to get a reminder once per
123 The value of this variable is a list of directories to search for
124 programs to run in subprocesses. Each element is either the name of a
125 directory (i.e., a string), or @code{nil}, which stands for the default
126 directory (which is the value of @code{default-directory}).
127 @cindex program directories
129 The value of @code{exec-path} is used by @code{call-process} and
130 @code{start-process} when the @var{program} argument is not an absolute
134 @node Synchronous Processes
135 @section Creating a Synchronous Process
136 @cindex synchronous subprocess
138 After a @dfn{synchronous process} is created, XEmacs waits for the
139 process to terminate before continuing. Starting Dired is an example of
140 this: it runs @code{ls} in a synchronous process, then modifies the
141 output slightly. Because the process is synchronous, the entire
142 directory listing arrives in the buffer before XEmacs tries to do
145 While Emacs waits for the synchronous subprocess to terminate, the
146 user can quit by typing @kbd{C-g}. The first @kbd{C-g} tries to kill
147 the subprocess with a @code{SIGINT} signal; but it waits until the
148 subprocess actually terminates before quitting. If during that time the
149 user types another @kbd{C-g}, that kills the subprocess instantly with
150 @code{SIGKILL} and quits immediately. @xref{Quitting}.
152 The synchronous subprocess functions returned @code{nil} in version
153 18. In version 19, they return an indication of how the process
156 @defun call-process program &optional infile destination display &rest args
157 This function calls @var{program} in a separate process and waits for
160 The standard input for the process comes from file @var{infile} if
161 @var{infile} is not @code{nil} and from @file{/dev/null} otherwise.
162 The argument @var{destination} says where to put the process output.
163 Here are the possibilities:
167 Insert the output in that buffer, before point. This includes both the
168 standard output stream and the standard error stream of the process.
171 Find or create a buffer with that name, then insert
172 the output in that buffer, before point.
175 Insert the output in the current buffer, before point.
181 Discard the output, and return immediately without waiting
182 for the subprocess to finish.
184 In this case, the process is not truly synchronous, since it can run in
185 parallel with Emacs; but you can think of it as synchronous in that
186 Emacs is essentially finished with the subprocess as soon as this
189 @item (@var{real-destination} @var{error-destination})
190 Keep the standard output stream separate from the standard error stream;
191 deal with the ordinary output as specified by @var{real-destination},
192 and dispose of the error output according to @var{error-destination}.
193 The value @code{nil} means discard it, @code{t} means mix it with the
194 ordinary output, and a string specifies a file name to redirect error
197 You can't directly specify a buffer to put the error output in; that is
198 too difficult to implement. But you can achieve this result by sending
199 the error output to a temporary file and then inserting the file into a
203 If @var{display} is non-@code{nil}, then @code{call-process} redisplays
204 the buffer as output is inserted. Otherwise the function does no
205 redisplay, and the results become visible on the screen only when XEmacs
206 redisplays that buffer in the normal course of events.
208 The remaining arguments, @var{args}, are strings that specify command
209 line arguments for the program.
211 The value returned by @code{call-process} (unless you told it not to
212 wait) indicates the reason for process termination. A number gives the
213 exit status of the subprocess; 0 means success, and any other value
214 means failure. If the process terminated with a signal,
215 @code{call-process} returns a string describing the signal.
217 In the examples below, the buffer @samp{foo} is current.
221 (call-process "pwd" nil t)
224 ---------- Buffer: foo ----------
225 /usr/user/lewis/manual
226 ---------- Buffer: foo ----------
230 (call-process "grep" nil "bar" nil "lewis" "/etc/passwd")
233 ---------- Buffer: bar ----------
234 lewis:5LTsHm66CSWKg:398:21:Bil Lewis:/user/lewis:/bin/csh
236 ---------- Buffer: bar ----------
240 The @code{insert-directory} function contains a good example of the use
241 of @code{call-process}:
245 (call-process insert-directory-program nil t nil switches
247 (concat (file-name-as-directory file) ".")
253 @defun call-process-region start end program &optional deletep destination displayp &rest args
254 This function sends the text between @var{start} to @var{end} as
255 standard input to a process running @var{program}. It deletes the text
256 sent if @var{deletep} is non-@code{nil}; this is useful when @var{buffer}
257 is @code{t}, to insert the output in the current buffer.
259 The arguments @var{destination} and @var{displayp} control what to do
260 with the output from the subprocess, and whether to update the display
261 as it comes in. For details, see the description of
262 @code{call-process}, above. If @var{destination} is the integer 0,
263 @code{call-process-region} discards the output and returns @code{nil}
264 immediately, without waiting for the subprocess to finish.
266 The remaining arguments, @var{args}, are strings that specify command
267 line arguments for the program.
269 The return value of @code{call-process-region} is just like that of
270 @code{call-process}: @code{nil} if you told it to return without
271 waiting; otherwise, a number or string which indicates how the
272 subprocess terminated.
274 In the following example, we use @code{call-process-region} to run the
275 @code{cat} utility, with standard input being the first five characters
276 in buffer @samp{foo} (the word @samp{input}). @code{cat} copies its
277 standard input into its standard output. Since the argument
278 @var{destination} is @code{t}, this output is inserted in the current
283 ---------- Buffer: foo ----------
285 ---------- Buffer: foo ----------
289 (call-process-region 1 6 "cat" nil t)
292 ---------- Buffer: foo ----------
294 ---------- Buffer: foo ----------
298 The @code{shell-command-on-region} command uses
299 @code{call-process-region} like this:
305 shell-file-name ; @r{Name of program.}
306 nil ; @r{Do not delete region.}
307 buffer ; @r{Send output to @code{buffer}.}
308 nil ; @r{No redisplay during output.}
309 "-c" command) ; @r{Arguments for the shell.}
314 @node MS-DOS Subprocesses
315 @section MS-DOS Subprocesses
317 On MS-DOS, you must indicate whether the data going to and from
318 a synchronous subprocess are text or binary. Text data requires
319 translation between the end-of-line convention used within Emacs
320 (a single newline character) and the convention used outside Emacs
321 (the two-character sequence, @sc{crlf}).
323 The variable @code{binary-process-input} applies to input sent to the
324 subprocess, and @code{binary-process-output} applies to output received
325 from it. A non-@code{nil} value means the data is non-text; @code{nil}
326 means the data is text, and calls for conversion.
328 @defvar binary-process-input
329 If this variable is @code{nil}, convert newlines to @sc{crlf} sequences in
330 the input to a synchronous subprocess.
333 @defvar binary-process-output
334 If this variable is @code{nil}, convert @sc{crlf} sequences to newlines in
335 the output from a synchronous subprocess.
338 @xref{Files and MS-DOS}, for related information.
340 @node Asynchronous Processes
341 @section Creating an Asynchronous Process
342 @cindex asynchronous subprocess
344 After an @dfn{asynchronous process} is created, Emacs and the Lisp
345 program both continue running immediately. The process may thereafter
346 run in parallel with Emacs, and the two may communicate with each other
347 using the functions described in following sections. Here we describe
348 how to create an asynchronous process with @code{start-process}.
350 @defun start-process name buffer-or-name program &rest args
351 This function creates a new asynchronous subprocess and starts the
352 program @var{program} running in it. It returns a process object that
353 stands for the new subprocess in Lisp. The argument @var{name}
354 specifies the name for the process object; if a process with this name
355 already exists, then @var{name} is modified (by adding @samp{<1>}, etc.)
356 to be unique. The buffer @var{buffer-or-name} is the buffer to
357 associate with the process.
359 The remaining arguments, @var{args}, are strings that specify command
360 line arguments for the program.
362 In the example below, the first process is started and runs (rather,
363 sleeps) for 100 seconds. Meanwhile, the second process is started, and
364 given the name @samp{my-process<1>} for the sake of uniqueness. It
365 inserts the directory listing at the end of the buffer @samp{foo},
366 before the first process finishes. Then it finishes, and a message to
367 that effect is inserted in the buffer. Much later, the first process
368 finishes, and another message is inserted in the buffer for it.
372 (start-process "my-process" "foo" "sleep" "100")
373 @result{} #<process my-process>
377 (start-process "my-process" "foo" "ls" "-l" "/user/lewis/bin")
378 @result{} #<process my-process<1>>
380 ---------- Buffer: foo ----------
382 lrwxrwxrwx 1 lewis 14 Jul 22 10:12 gnuemacs --> /emacs
383 -rwxrwxrwx 1 lewis 19 Jul 30 21:02 lemon
385 Process my-process<1> finished
387 Process my-process finished
388 ---------- Buffer: foo ----------
393 @defun start-process-shell-command name buffer-or-name command &rest command-args
394 This function is like @code{start-process} except that it uses a shell
395 to execute the specified command. The argument @var{command} is a shell
396 command name, and @var{command-args} are the arguments for the shell
400 @defvar process-connection-type
403 This variable controls the type of device used to communicate with
404 asynchronous subprocesses. If it is non-@code{nil}, then @sc{pty}s are
405 used, when available. Otherwise, pipes are used.
407 @sc{pty}s are usually preferable for processes visible to the user, as
408 in Shell mode, because they allow job control (@kbd{C-c}, @kbd{C-z},
409 etc.) to work between the process and its children whereas pipes do not.
410 For subprocesses used for internal purposes by programs, it is often
411 better to use a pipe, because they are more efficient. In addition, the
412 total number of @sc{pty}s is limited on many systems and it is good not
413 to waste them. A rule of thumb is to use ptys for processes the user
414 interacts with directly, and pipes for processes that are hidden from
417 The value @code{process-connection-type} is used when
418 @code{start-process} is called. So you can specify how to communicate
419 with one subprocess by binding the variable around the call to
420 @code{start-process}.
424 (let ((process-connection-type nil)) ; @r{Use a pipe.}
425 (start-process @dots{}))
429 To determine whether a given subprocess actually got a pipe or a
430 @sc{pty}, use the function @code{process-tty-name} (@pxref{Process
434 Lisp functions that manipulate processes usually accept a @var{process}
435 argument. Besides using an actual process object for this argument, you
436 can use a process name, a buffer object, the name of a buffer, or
437 @code{nil}. Specifying a buffer or buffer name for the @var{process}
438 argument means use the process associated with the buffer (or the most
439 recent one, if there is more than one). @code{nil} means use the
440 process associated with the current buffer.
441 @xref{Process Information}.
442 @xref{Process Buffers}.
444 @node Deleting Processes
445 @section Deleting Processes
446 @cindex deleting processes
448 @dfn{Deleting a process} disconnects XEmacs immediately from the
449 subprocess, and removes it from the list of active processes. It sends
450 a signal to the subprocess to make the subprocess terminate, but this is
451 not guaranteed to happen immediately. The process object itself
452 continues to exist as long as other Lisp objects point to it.
454 You can delete a process explicitly at any time. Processes are
455 deleted automatically after they terminate, but not necessarily right
456 away. If you delete a terminated process explicitly before it is
457 deleted automatically, no harm results.
459 @defvar delete-exited-processes
460 This variable controls automatic deletion of processes that have
461 terminated (due to calling @code{exit} or to a signal). If it is
462 @code{nil}, then they continue to exist until the user runs
463 @code{list-processes}. Otherwise, they are deleted immediately after
467 @defun delete-process name
468 This function deletes the process associated with @var{name}, killing it
469 with a @code{SIGHUP} signal. The argument @var{name} may be a process,
470 the name of a process, a buffer, or the name of a buffer.
474 (delete-process "*shell*")
480 @defun process-kill-without-query process &optional require-query-p
481 This function declares that XEmacs need not query the user if
482 @var{process} is still running when XEmacs is exited. The process will
483 be deleted silently. If @var{require-query-p} is non-@code{nil},
484 then XEmacs @emph{will} query the user (this is the default). The
485 return value is @code{t} if a query was formerly required, and
486 @code{nil} otherwise.
490 (process-kill-without-query (get-process "shell"))
496 @node Process Information
497 @section Process Information
499 Several functions return information about processes.
500 @code{list-processes} is provided for interactive use.
502 @deffn Command list-processes
503 This command displays a listing of all living processes. In addition,
504 it finally deletes any process whose status was @samp{Exited} or
505 @samp{Signaled}. It returns @code{nil}.
509 This function returns a list of all processes that have not been deleted.
514 @result{} (#<process display-time> #<process shell>)
519 @defun get-process process-name
520 This function returns the process named @var{process-name}. If
521 @var{process-name} is a string and there is no process with that name, the
522 value is @code{nil}. If @var{process-name} is actually a process, it is
523 returned as given. (That is not very useful, so the argument is usually
524 a name.) For example:
528 (get-process "shell")
529 @result{} #<process shell>
534 @defun process-command process
535 This function returns the command that was executed to start
536 @var{process}. This is a list of strings, the first string being the
537 program executed and the rest of the strings being the arguments that
538 were given to the program.
542 (process-command (get-process "shell"))
543 @result{} ("/bin/csh" "-i")
548 @defun process-id process
549 This function returns the @sc{pid} of @var{process}. This is an
550 integer that distinguishes the process @var{process} from all other
551 processes running on the same computer at the current time. The
552 @sc{pid} of a process is chosen by the operating system kernel when the
553 process is started and remains constant as long as the process exists.
556 @defun process-name process
557 This function returns the name of @var{process}.
560 @defun process-status process
561 This function returns the status of @var{process} as a symbol.
562 The argument @var{process} must be a process, a buffer, a
563 process name (string) or a buffer name (string).
565 The possible values for an actual subprocess are:
569 for a process that is running.
571 for a process that is stopped but continuable.
573 for a process that has exited.
575 for a process that has received a fatal signal.
577 for a network connection that is open.
579 for a network connection that is closed. Once a connection
580 is closed, you cannot reopen it, though you might be able to open
581 a new connection to the same place.
583 if @var{process} does not identify an existing process.
588 (process-status "shell")
592 (process-status (get-buffer "*shell*"))
597 @result{} #<process xx<1>>
603 For a network connection, @code{process-status} returns one of the symbols
604 @code{open} or @code{closed}. The latter means that the other side
605 closed the connection, or XEmacs did @code{delete-process}.
607 In earlier Emacs versions (prior to version 19), the status of a network
608 connection was @code{run} if open, and @code{exit} if closed.
611 @defun process-kill-without-query-p process
612 This function returns whether @var{process} will be killed without
613 querying the user, if it is running when XEmacs is exited. The default
617 @defun process-exit-status process
618 This function returns the exit status of @var{process} or the signal
619 number that killed it. (Use the result of @code{process-status} to
620 determine which of those it is.) If @var{process} has not yet
621 terminated, the value is 0.
624 @defun process-tty-name process
625 This function returns the terminal name that @var{process} is using for
626 its communication with Emacs---or @code{nil} if it is using pipes
627 instead of a terminal (see @code{process-connection-type} in
628 @ref{Asynchronous Processes}).
631 @node Input to Processes
632 @section Sending Input to Processes
633 @cindex process input
635 Asynchronous subprocesses receive input when it is sent to them by
636 XEmacs, which is done with the functions in this section. You must
637 specify the process to send input to, and the input data to send. The
638 data appears on the ``standard input'' of the subprocess.
640 Some operating systems have limited space for buffered input in a
641 @sc{pty}. On these systems, XEmacs sends long input in chunks, with
642 @sc{eof} characters added amidst the other characters, to force the
643 operating system to periodically drain the input buffer. For most
644 programs, these @sc{eof}s do no harm.
646 @defun process-send-string process string &optional start end
647 This function sends @var{process} the contents of @var{string} as
650 The argument @var{process} may be a process or the name of a process, or
651 a buffer or the name of a buffer, in which case the buffer's process is
652 used. If it is @code{nil}, the current buffer's process is used.
654 Optional arguments @var{start} and @var{end} specify part of @var{string};
655 see @code{substring}.
657 The function returns @code{nil}.
661 (process-send-string "shell<1>" "ls\n")
667 ---------- Buffer: *shell* ----------
669 introduction.texi syntax-tables.texi~
670 introduction.texi~ text.texi
671 introduction.txt text.texi~
673 ---------- Buffer: *shell* ----------
678 @defun process-send-region process start end &optional buffer
679 This function sends the text in the region defined by @var{start} and
680 @var{end} as standard input to @var{process}.
682 The argument @var{process} may be a process or the name of a process, or
683 a buffer or the name of a buffer, in which case the buffer's process is
684 used. If it is @code{nil}, the current buffer's process is used.
686 An error is signaled unless both @var{start} and @var{end} are
687 integers or markers that indicate positions in the current buffer. (It
688 is unimportant which number is larger.)
691 @defun process-send-eof &optional process
692 This function makes @var{process} see an end-of-file in its
693 input. The @sc{eof} comes after any text already sent to it.
695 @var{process} may be a process, a buffer, the name of a process or
696 buffer, or @code{nil}, indicating the current buffer's process. An
697 error is signaled if @var{process} does not identify any process.
699 The function returns the process object identified by @var{process}.
703 (process-send-eof "shell")
709 @node Signals to Processes
710 @section Sending Signals to Processes
711 @cindex process signals
712 @cindex sending signals
715 @dfn{Sending a signal} to a subprocess is a way of interrupting its
716 activities. There are several different signals, each with its own
717 meaning. The set of signals and their names is defined by the operating
718 system. For example, the signal @code{SIGINT} means that the user has
719 typed @kbd{C-c}, or that some analogous thing has happened.
721 Each signal has a standard effect on the subprocess. Most signals
722 kill the subprocess, but some stop or resume execution instead. Most
723 signals can optionally be handled by programs; if the program handles
724 the signal, then we can say nothing in general about its effects.
726 The set of signals and their names is defined by the operating system;
727 XEmacs has facilities for sending only a few of the signals that are
728 defined. XEmacs can send signals only to its own subprocesses.
730 You can send signals explicitly by calling the functions in this
731 section. XEmacs also sends signals automatically at certain times:
732 killing a buffer sends a @code{SIGHUP} signal to all its associated
733 processes; killing XEmacs sends a @code{SIGHUP} signal to all remaining
734 processes. (@code{SIGHUP} is a signal that indicates that the
735 connection between the user and the process is broken, for example if a
736 connection via a telephone line is hung up.)
738 Each of the signal-sending functions takes two optional arguments:
739 @var{process} and @var{current-group}.
741 The argument @var{process} must be either a process or a buffer,
742 the name of one, or @code{nil}. If it is @code{nil}, the process
743 defaults to the process associated with the current buffer. An error is
744 signaled if @var{process} does not identify a process.
746 The argument @var{current-group} is a flag that makes a difference
747 when you are running a job-control shell as an XEmacs subprocess. If it
748 is non-@code{nil}, then the signal is sent to the current foreground
749 process group of the terminal that XEmacs uses to communicate with the
750 subprocess. If the process is a job-control shell, this means the
751 shell's current subjob. If it is @code{nil}, the signal is sent to the
752 process group of the immediate subprocess of XEmacs. If the subprocess
753 is a job-control shell, this is the shell itself.
755 The flag @var{current-group} has no effect when a pipe is used to
756 communicate with the subprocess, because the operating system does not
757 support the distinction in the case of pipes. For the same reason,
758 job-control shells won't work when a pipe is used. See
759 @code{process-connection-type} in @ref{Asynchronous Processes}.
761 Some of the functions below take a @var{signal} argument, which
762 identifies a signal to be sent. It must be either an integer or a
763 symbol which names the signal, like @code{SIGSEGV}.
765 @defun process-send-signal signal &optional process current-group
766 This function sends the signal @var{signal} to the process @var{process}.
767 The following functions can be implemented in terms of
768 @code{process-send-signal}.
771 @defun interrupt-process &optional process current-group
772 This function interrupts the process @var{process} by sending the signal
773 @code{SIGINT}. Outside of XEmacs, typing the ``interrupt character''
774 (normally @kbd{C-c}) sends this signal. When the argument
775 @var{current-group} is non-@code{nil}, you can think of this function as
776 ``typing @kbd{C-c}'' on the terminal by which XEmacs talks to the
780 @defun kill-process &optional process current-group
781 This function kills the process @var{process} by sending the
782 signal @code{SIGKILL}. This signal kills the subprocess immediately,
783 and cannot be handled by the subprocess.
786 @defun quit-process &optional process current-group
787 This function sends the signal @code{SIGQUIT} to the process
788 @var{process}. This signal is the one sent by the ``quit
789 character'' (usually @kbd{C-\}) when you are not inside XEmacs.
792 @defun stop-process &optional process current-group
793 This function stops the process @var{process} by sending the
794 signal @code{SIGTSTP}. Use @code{continue-process} to resume its
797 On systems with job control, the ``stop character'' (usually @kbd{C-z})
798 sends this signal (outside of XEmacs). When @var{current-group} is
799 non-@code{nil}, you can think of this function as ``typing @kbd{C-z}''
800 on the terminal XEmacs uses to communicate with the subprocess.
803 @defun continue-process &optional process current-group
804 This function resumes execution of the process @var{process} by sending
805 it the signal @code{SIGCONT}. This presumes that @var{process} was
809 @deffn Command signal-process pid signal
810 This function sends a signal to the process with process id @var{pid},
811 which need not be a child of XEmacs. The argument @var{signal}
812 specifies which signal to send.
815 @node Output from Processes
816 @section Receiving Output from Processes
817 @cindex process output
818 @cindex output from processes
820 There are two ways to receive the output that a subprocess writes to
821 its standard output stream. The output can be inserted in a buffer,
822 which is called the associated buffer of the process, or a function
823 called the @dfn{filter function} can be called to act on the output. If
824 the process has no buffer and no filter function, its output is
828 * Process Buffers:: If no filter, output is put in a buffer.
829 * Filter Functions:: Filter functions accept output from the process.
830 * Accepting Output:: Explicitly permitting subprocess output.
831 Waiting for subprocess output.
834 @node Process Buffers
835 @subsection Process Buffers
837 A process can (and usually does) have an @dfn{associated buffer},
838 which is an ordinary Emacs buffer that is used for two purposes: storing
839 the output from the process, and deciding when to kill the process. You
840 can also use the buffer to identify a process to operate on, since in
841 normal practice only one process is associated with any given buffer.
842 Many applications of processes also use the buffer for editing input to
843 be sent to the process, but this is not built into XEmacs Lisp.
845 Unless the process has a filter function (@pxref{Filter Functions}),
846 its output is inserted in the associated buffer. The position to insert
847 the output is determined by the @code{process-mark}, which is then
848 updated to point to the end of the text just inserted. Usually, but not
849 always, the @code{process-mark} is at the end of the buffer.
851 @defun process-buffer process
852 This function returns the associated buffer of the process
857 (process-buffer (get-process "shell"))
858 @result{} #<buffer *shell*>
863 @defun process-mark process
864 This function returns the process marker for @var{process}, which is the
865 marker that says where to insert output from the process.
867 If @var{process} does not have a buffer, @code{process-mark} returns a
868 marker that points nowhere.
870 Insertion of process output in a buffer uses this marker to decide where
871 to insert, and updates it to point after the inserted text. That is why
872 successive batches of output are inserted consecutively.
874 Filter functions normally should use this marker in the same fashion
875 as is done by direct insertion of output in the buffer. A good
876 example of a filter function that uses @code{process-mark} is found at
877 the end of the following section.
879 When the user is expected to enter input in the process buffer for
880 transmission to the process, the process marker is useful for
881 distinguishing the new input from previous output.
884 @defun set-process-buffer process buffer
885 This function sets the buffer associated with @var{process} to
886 @var{buffer}. If @var{buffer} is @code{nil}, the process becomes
887 associated with no buffer.
890 @defun get-buffer-process buffer-or-name
891 This function returns the process associated with @var{buffer-or-name}.
892 If there are several processes associated with @var{buffer-or-name},
893 then one is chosen. (Presently, the one chosen is the one most recently
894 created.) It is usually a bad idea to have more than one process
895 associated with the same buffer.
899 (get-buffer-process "*shell*")
900 @result{} #<process shell>
904 Killing the process's buffer deletes the process, which kills the
905 subprocess with a @code{SIGHUP} signal (@pxref{Signals to Processes}).
908 @node Filter Functions
909 @subsection Process Filter Functions
910 @cindex filter function
911 @cindex process filter
913 A process @dfn{filter function} is a function that receives the
914 standard output from the associated process. If a process has a filter,
915 then @emph{all} output from that process is passed to the filter. The
916 process buffer is used directly for output from the process only when
919 A filter function must accept two arguments: the associated process and
920 a string, which is the output. The function is then free to do whatever it
921 chooses with the output.
923 A filter function runs only while XEmacs is waiting (e.g., for terminal
924 input, or for time to elapse, or for process output). This avoids the
925 timing errors that could result from running filters at random places in
926 the middle of other Lisp programs. You may explicitly cause Emacs to
927 wait, so that filter functions will run, by calling @code{sit-for} or
928 @code{sleep-for} (@pxref{Waiting}), or @code{accept-process-output}
929 (@pxref{Accepting Output}). Emacs is also waiting when the command loop
932 Quitting is normally inhibited within a filter function---otherwise,
933 the effect of typing @kbd{C-g} at command level or to quit a user
934 command would be unpredictable. If you want to permit quitting inside a
935 filter function, bind @code{inhibit-quit} to @code{nil}.
938 If an error happens during execution of a filter function, it is
939 caught automatically, so that it doesn't stop the execution of whatever
940 program was running when the filter function was started. However, if
941 @code{debug-on-error} is non-@code{nil}, the error-catching is turned
942 off. This makes it possible to use the Lisp debugger to debug the
943 filter function. @xref{Debugger}.
945 Many filter functions sometimes or always insert the text in the
946 process's buffer, mimicking the actions of XEmacs when there is no
947 filter. Such filter functions need to use @code{set-buffer} in order to
948 be sure to insert in that buffer. To avoid setting the current buffer
949 semipermanently, these filter functions must use @code{unwind-protect}
950 to make sure to restore the previous current buffer. They should also
951 update the process marker, and in some cases update the value of point.
952 Here is how to do these things:
956 (defun ordinary-insertion-filter (process string)
957 (let ((old-buffer (current-buffer)))
960 (set-buffer (process-buffer process))
961 (setq moving (= (point) (process-mark process)))
965 ;; @r{Insert the text, moving the process-marker.}
966 (goto-char (process-mark process))
968 (set-marker (process-mark process) (point)))
969 (if moving (goto-char (process-mark process))))
970 (set-buffer old-buffer))))
975 The reason to use an explicit @code{unwind-protect} rather than letting
976 @code{save-excursion} restore the current buffer is so as to preserve
977 the change in point made by @code{goto-char}.
979 To make the filter force the process buffer to be visible whenever new
980 text arrives, insert the following line just before the
981 @code{unwind-protect}:
984 (display-buffer (process-buffer process))
987 To force point to move to the end of the new output no matter where
988 it was previously, eliminate the variable @code{moving} and call
989 @code{goto-char} unconditionally.
991 In earlier Emacs versions, every filter function that did regexp
992 searching or matching had to explicitly save and restore the match data.
993 Now Emacs does this automatically; filter functions never need to do it
994 explicitly. @xref{Match Data}.
996 A filter function that writes the output into the buffer of the
997 process should check whether the buffer is still alive. If it tries to
998 insert into a dead buffer, it will get an error. If the buffer is dead,
999 @code{(buffer-name (process-buffer @var{process}))} returns @code{nil}.
1001 The output to the function may come in chunks of any size. A program
1002 that produces the same output twice in a row may send it as one batch
1003 of 200 characters one time, and five batches of 40 characters the next.
1005 @defun set-process-filter process filter
1006 This function gives @var{process} the filter function @var{filter}. If
1007 @var{filter} is @code{nil}, then the process will have no filter. If
1008 @var{filter} is @code{t}, then no output from the process will be
1009 accepted until the filter is changed. (Output received during this
1010 time is not discarded, but is queued, and will be processed as soon
1011 as the filter is changed.)
1014 @defun process-filter process
1015 This function returns the filter function of @var{process}, or @code{nil}
1016 if it has none. @code{t} means that output processing has been stopped.
1019 Here is an example of use of a filter function:
1023 (defun keep-output (process output)
1024 (setq kept (cons output kept)))
1025 @result{} keep-output
1032 (set-process-filter (get-process "shell") 'keep-output)
1033 @result{} keep-output
1036 (process-send-string "shell" "ls ~/other\n")
1039 @result{} ("lewis@@slug[8] % "
1042 "FINAL-W87-SHORT.MSS backup.otl kolstad.mss~
1043 address.txt backup.psf kolstad.psf
1044 backup.bib~ david.mss resume-Dec-86.mss~
1045 backup.err david.psf resume-Dec.psf
1046 backup.mss dland syllabus.mss
1048 "#backups.mss# backup.mss~ kolstad.mss
1053 @ignore @c The code in this example doesn't show the right way to do things.
1054 Here is another, more realistic example, which demonstrates how to use
1055 the process mark to do insertion in the same fashion as is done when
1056 there is no filter function:
1060 ;; @r{Insert input in the buffer specified by @code{my-shell-buffer}}
1061 ;; @r{and make sure that buffer is shown in some window.}
1062 (defun my-process-filter (process string)
1063 (let ((cur (selected-window))
1065 (pop-to-buffer my-shell-buffer)
1068 (goto-char (point-max))
1070 (set-marker (process-mark process) (point-max))
1071 (select-window cur)))
1076 @node Accepting Output
1077 @subsection Accepting Output from Processes
1079 Output from asynchronous subprocesses normally arrives only while
1080 XEmacs is waiting for some sort of external event, such as elapsed time
1081 or terminal input. Occasionally it is useful in a Lisp program to
1082 explicitly permit output to arrive at a specific point, or even to wait
1083 until output arrives from a process.
1085 @defun accept-process-output &optional process seconds millisec
1086 This function allows XEmacs to read pending output from processes. The
1087 output is inserted in the associated buffers or given to their filter
1088 functions. If @var{process} is non-@code{nil} then this function does
1089 not return until some output has been received from @var{process}.
1092 The arguments @var{seconds} and @var{millisec} let you specify timeout
1093 periods. The former specifies a period measured in seconds and the
1094 latter specifies one measured in milliseconds. The two time periods
1095 thus specified are added together, and @code{accept-process-output}
1096 returns after that much time whether or not there has been any
1097 subprocess output. Note that @var{seconds} is allowed to be a
1098 floating-point number; thus, there is no need to ever use
1099 @var{millisec}. (It is retained for compatibility purposes.)
1100 @ignore Not in XEmacs
1102 The argument @var{seconds} need not be an integer. If it is a floating
1103 point number, this function waits for a fractional number of seconds.
1104 Some systems support only a whole number of seconds; on these systems,
1105 @var{seconds} is rounded down. If the system doesn't support waiting
1106 fractions of a second, you get an error if you specify nonzero
1109 Not all operating systems support waiting periods other than multiples
1110 of a second; on those that do not, you get an error if you specify
1111 nonzero @var{millisec}.
1114 The function @code{accept-process-output} returns non-@code{nil} if it
1115 did get some output, or @code{nil} if the timeout expired before output
1120 @section Sentinels: Detecting Process Status Changes
1121 @cindex process sentinel
1124 A @dfn{process sentinel} is a function that is called whenever the
1125 associated process changes status for any reason, including signals
1126 (whether sent by XEmacs or caused by the process's own actions) that
1127 terminate, stop, or continue the process. The process sentinel is also
1128 called if the process exits. The sentinel receives two arguments: the
1129 process for which the event occurred, and a string describing the type
1132 The string describing the event looks like one of the following:
1136 @code{"finished\n"}.
1139 @code{"exited abnormally with code @var{exitcode}\n"}.
1142 @code{"@var{name-of-signal}\n"}.
1145 @code{"@var{name-of-signal} (core dumped)\n"}.
1148 A sentinel runs only while XEmacs is waiting (e.g., for terminal input,
1149 or for time to elapse, or for process output). This avoids the timing
1150 errors that could result from running them at random places in the
1151 middle of other Lisp programs. A program can wait, so that sentinels
1152 will run, by calling @code{sit-for} or @code{sleep-for}
1153 (@pxref{Waiting}), or @code{accept-process-output} (@pxref{Accepting
1154 Output}). Emacs is also waiting when the command loop is reading input.
1156 Quitting is normally inhibited within a sentinel---otherwise, the
1157 effect of typing @kbd{C-g} at command level or to quit a user command
1158 would be unpredictable. If you want to permit quitting inside a
1159 sentinel, bind @code{inhibit-quit} to @code{nil}. @xref{Quitting}.
1161 A sentinel that writes the output into the buffer of the process
1162 should check whether the buffer is still alive. If it tries to insert
1163 into a dead buffer, it will get an error. If the buffer is dead,
1164 @code{(buffer-name (process-buffer @var{process}))} returns @code{nil}.
1166 If an error happens during execution of a sentinel, it is caught
1167 automatically, so that it doesn't stop the execution of whatever
1168 programs was running when the sentinel was started. However, if
1169 @code{debug-on-error} is non-@code{nil}, the error-catching is turned
1170 off. This makes it possible to use the Lisp debugger to debug the
1171 sentinel. @xref{Debugger}.
1173 In earlier Emacs versions, every sentinel that did regexp searching or
1174 matching had to explicitly save and restore the match data. Now Emacs
1175 does this automatically; sentinels never need to do it explicitly.
1178 @defun set-process-sentinel process sentinel
1179 This function associates @var{sentinel} with @var{process}. If
1180 @var{sentinel} is @code{nil}, then the process will have no sentinel.
1181 The default behavior when there is no sentinel is to insert a message in
1182 the process's buffer when the process status changes.
1186 (defun msg-me (process event)
1188 (format "Process: %s had the event `%s'" process event)))
1189 (set-process-sentinel (get-process "shell") 'msg-me)
1193 (kill-process (get-process "shell"))
1194 @print{} Process: #<process shell> had the event `killed'
1195 @result{} #<process shell>
1200 @defun process-sentinel process
1201 This function returns the sentinel of @var{process}, or @code{nil} if it
1205 @defun waiting-for-user-input-p
1206 While a sentinel or filter function is running, this function returns
1207 non-@code{nil} if XEmacs was waiting for keyboard input from the user at
1208 the time the sentinel or filter function was called, @code{nil} if it
1213 @node Process Window Size
1214 @section Process Window Size
1215 @cindex process window size
1217 @defun set-process-window-size process height width
1218 This function tells @var{process} that its logical window size is
1219 @var{height} by @var{width} characters. This is principally useful
1223 @node Transaction Queues
1224 @section Transaction Queues
1225 @cindex transaction queue
1227 You can use a @dfn{transaction queue} for more convenient communication
1228 with subprocesses using transactions. First use @code{tq-create} to
1229 create a transaction queue communicating with a specified process. Then
1230 you can call @code{tq-enqueue} to send a transaction.
1232 @defun tq-create process
1233 This function creates and returns a transaction queue communicating with
1234 @var{process}. The argument @var{process} should be a subprocess
1235 capable of sending and receiving streams of bytes. It may be a child
1236 process, or it may be a TCP connection to a server, possibly on another
1240 @defun tq-enqueue queue question regexp closure fn
1241 This function sends a transaction to queue @var{queue}. Specifying the
1242 queue has the effect of specifying the subprocess to talk to.
1244 The argument @var{question} is the outgoing message that starts the
1245 transaction. The argument @var{fn} is the function to call when the
1246 corresponding answer comes back; it is called with two arguments:
1247 @var{closure}, and the answer received.
1249 The argument @var{regexp} is a regular expression that should match the
1250 entire answer, but nothing less; that's how @code{tq-enqueue} determines
1251 where the answer ends.
1253 The return value of @code{tq-enqueue} itself is not meaningful.
1256 @defun tq-close queue
1257 Shut down transaction queue @var{queue}, waiting for all pending transactions
1258 to complete, and then terminate the connection or child process.
1261 Transaction queues are implemented by means of a filter function.
1262 @xref{Filter Functions}.
1265 @section Network Connections
1266 @cindex network connection
1269 XEmacs Lisp programs can open TCP network connections to other processes on
1270 the same machine or other machines. A network connection is handled by Lisp
1271 much like a subprocess, and is represented by a process object.
1272 However, the process you are communicating with is not a child of the
1273 XEmacs process, so you can't kill it or send it signals. All you can do
1274 is send and receive data. @code{delete-process} closes the connection,
1275 but does not kill the process at the other end; that process must decide
1276 what to do about closure of the connection.
1278 You can distinguish process objects representing network connections
1279 from those representing subprocesses with the @code{process-status}
1280 function. It always returns either @code{open} or @code{closed} for a
1281 network connection, and it never returns either of those values for a
1282 real subprocess. @xref{Process Information}.
1284 @defun open-network-stream name buffer-or-name host service &optional protocol
1285 This function opens a TCP connection for a service to a host. It
1286 returns a process object to represent the connection.
1288 Input and output work as for other process objects.
1289 @code{delete-process} closes the connection.
1291 The @var{name} argument specifies the name for the process object. It
1292 is modified as necessary to make it unique.
1294 The @var{buffer-or-name} argument is the buffer to associate with the
1295 connection. It can be a buffer or the name of one. Output from the
1296 connection is inserted in the buffer, unless you specify a filter
1297 function to handle the output. If @var{buffer-or-name} is @code{nil},
1298 it means that the connection is not associated with any buffer.
1300 The arguments @var{host} and @var{service} specify where to connect to;
1301 @var{host} is the host name or IP address (a string), and @var{service}
1302 is the name of a defined network service (a string) or a port number (an
1305 Optional fifth arg @var{protocol} is the network protocol to use.
1306 Currently only @code{tcp} (Transmission Control Protocol) and @code{udp}
1307 (User Datagram Protocol) are supported. When omitted, @code{tcp} is assumed.
1309 Output via @code{process-send-string} and input via buffer or filter
1310 (see @code{set-process-filter}) are stream-oriented. That means
1311 UDP datagrams are not guaranteed to be sent and received in
1312 discrete packets. (But small datagrams around 500 bytes that are not
1313 truncated by @code{process-send-string} are usually fine.) Note further
1314 that the UDP protocol does not guard against lost packets.