Module Ecaml.Process

Process is used to create "subprocesses" or "child processes" of the Emacs process, which is their "parent process". A subprocess of Emacs may be "synchronous" or "asynchronous", depending on how it is created. When you create a synchronous subprocess, the program waits for the subprocess to terminate before continuing execution. When you create an asynchronous subprocess, it can run in parallel with Emacs. This kind of subprocess is represented within Emacs by a Process.t. Programs can use this object to communicate with the subprocess or to control it. For example, you can send signals, obtain status information, receive output from the process, or send input to it.

(Info-goto-node "(elisp)Processes").

type t = Ecaml__.Process0.t
val sexp_of_t : t -> Ppx_sexp_conv_lib.Sexp.t
include Core_kernel.Equal.S with type t := t
type t
val equal : t Core_kernel.Equal.equal
include Ecaml__.Import.Value.Subtype with type t := t
type value
type t = private value

We expose private value for free identity conversions when the value is nested in some covariant type, e.g. (symbols : Symbol.t list :> Value.t list) rather than List.map symbols ~f:Symbol.to_value.

val sexp_of_t : t -> Ppx_sexp_conv_lib.Sexp.t
val eq : t -> t -> bool

eq t1 t2 = Value.eq (to_value t1) (to_value t2), i.e. eq checks whether the Emacs values underlying t1 and t2 are physically equal. This is different than phys_equal t1 t2, because we don't always wrap eq Emacs values in phys_equal OCaml values. I.e. phys_equal t1 t2 implies eq t1 t2, but not the converse.

val is_in_subtype : value -> bool
include Ecaml_value__.Valueable0.S with type t := t
type t
type 'a type_
val of_value_exn : Ecaml_value__.Value0.t -> t
val to_value : t -> Ecaml_value__.Value0.t
val type_ : t type_
val t : t type_
val buffer : t -> Ecaml__.Import.Buffer.t option

(describe-function 'process-buffer)

val command : t -> string list option

(describe-function 'process-command)

val name : t -> string

(describe-function 'process-name)

val pid : t -> Core_kernel.Pid.t option

(describe-function 'process-id)

val query_on_exit : t -> bool

(describe-function 'process-query-on-exit-flag)

module Status : sig ... end
val status : t -> Status.t

(describe-function 'process-status)

module Exit_status : sig ... end
val exit_status : t -> Exit_status.t

(describe-function 'process-exit-status)

module Exited : sig ... end
val exited : t -> Exited.t Async_kernel.Deferred.t
val is_alive : t -> bool

(describe-function 'process-live-p)

val mark : t -> Marker.t

(describe-function 'process-mark)

val set_query_on_exit : t -> bool -> unit

set_query_on_exit t specifies whether Emacs should query the user about killing t when it exits. (describe-function 'set-process-query-on-exit-flag).

val all_emacs_children : unit -> t list

(describe-function 'process-list)

val get_property : t -> Symbol.t -> Ecaml__.Import.Value.t option

(describe-function 'process-get)

val set_property : t -> Symbol.t -> Ecaml__.Import.Value.t -> unit

(describe-function 'process-put)

val create : string -> string list -> name:string -> ?⁠buffer:Ecaml__.Import.Buffer.t -> unit -> t

(Info-goto-node "(elisp)Asynchronous Processes") (describe-function 'start-process)

val find_by_name : string -> t option

(describe-function 'get-process) (Info-goto-node "(elisp)Process Information")

module Call : sig ... end
val call_result_exn : ?⁠input:Call.Input.t -> ?⁠output:Call.Output.t -> ?⁠redisplay_on_output:bool -> ?⁠working_directory:Working_directory.t -> string -> string list -> Call.Result.t

(Info-goto-node "(elisp)Synchronous Processes") (describe-function 'call-process)

val call_region_exn : ?⁠input:Call.Region_input.t -> ?⁠output:Call.Output.t -> ?⁠redisplay_on_output:bool -> ?⁠working_directory:Working_directory.t -> string -> string list -> Call.Result.t

(Info-goto-node "(elisp)Synchronous Processes") (describe-function 'call-process-region)

val call_exn : ?⁠input:Call.Input.t -> ?⁠working_directory:Working_directory.t -> ?⁠strip_whitespace:bool -> ?⁠verbose_exn:bool -> string -> string list -> string

call_exn runs call_result_exn, strips whitespace from stdout+stderr if strip_whitespace is true, and returns the resulting string, raising on nonzero exit.

val call_expect_no_output_exn : ?⁠input:Call.Input.t -> ?⁠working_directory:Working_directory.t -> ?⁠strip_whitespace:bool -> ?⁠verbose_exn:bool -> string -> string list -> unit

call_expect_no_output_exn runs call_result_exn and raises if the command output is not the empty string or on nonzero exit.

val shell_command_result : ?⁠input:Call.Input.t -> ?⁠output:Call.Output.t -> ?⁠redisplay_on_output:bool -> ?⁠working_directory:Working_directory.t -> string -> Call.Result.t
val shell_command_exn : ?⁠input:Call.Input.t -> ?⁠working_directory:Working_directory.t -> ?⁠verbose_exn:bool -> string -> string

shell_command_exn command runs command in a subshell, strips whitespace from stdout+stderr, and returns the resulting string, raising on nonzero exit.

val shell_command_expect_no_output_exn : ?⁠input:Call.Input.t -> ?⁠working_directory:Working_directory.t -> ?⁠verbose_exn:bool -> string -> unit
val create_unix_network_process : unit -> filter:(t -> Text.t -> unit) -> name:string -> socket_path:string -> t

(Info-goto-node "(elisp)Network Servers") (describe-function 'make-network-process)

The t returned by create_unix_network_process represents listening on the socket. The t passed to filter represents a specific connection accepted on the socket.

val kill : t -> unit

(Info-goto-node "(elisp)Deleting Processes") (describe-function 'delete-process).

val extend_sentinel : Core_kernel.Source_code_position.t -> t -> (unit, 'a) Defun.Returns.t -> sentinel:(event:string -> 'a) -> unit

(Info-goto-node "(elisp)Sentinels")

Register sentinel as a process sentinel for the specified process. sentinel runs after any other processes sentinels set for that process.