41.6 进程信息

有多个函数可以返回进程相关信息。

Command: list-processes &optional query-only buffer

该命令显示所有存活进程的列表。此外,它最终会删除所有状态为 ‘Exited’ 或 ‘Signaled’ 的进程。返回 nil

进程会显示在名为 *Process List* 的缓冲区中(除非使用可选参数 buffer 指定其他缓冲区),其主模式为进程菜单模式。

如果 query-onlynil,则只列出退出询问标志非空的进程。See 退出前询问确认.

Function: process-list

该函数返回所有未被删除的进程列表。

(process-list)
     ⇒ (#<process display-time> #<process shell>)
Function: num-processors &optional query

该函数返回处理器数量,为一个正整数。每个可用的线程执行单元计为一个处理器。 默认情况下,该数量包含可用处理器数目,你可以通过设置 OpenMP 的 OMP_NUM_THREADS 环境变量 来覆盖它。 如果可选参数 querycurrent,该函数会忽略 OMP_NUM_THREADS; 如果为 all,则会统计系统上存在但当前进程不可用的处理器。

Function: get-process name

该函数返回名为 name(字符串)的进程,若无则返回 nil。参数 name 也可以是一个进程对象,此时直接返回该对象。

(get-process "shell")
     ⇒ #<process shell>
Function: process-command process

该函数返回启动 process 时执行的命令。这是一个字符串列表,第一个字符串是被执行的程序,其余是传给程序的参数。对于网络、串口或管道连接,该值为 nil(表示进程正在运行)或 t(表示进程已停止)。

(process-command (get-process "shell"))
     ⇒ ("bash" "-i")
Function: process-contact process &optional key no-block

该函数返回关于网络、串口或管道连接如何建立的信息。当 keynil 时, 网络连接返回 (hostname service), 串口连接返回 (port speed), 管道连接返回 t。 对于普通子进程,keynil 时始终返回 t

如果 keyt,返回值为连接、服务器、串口或管道的完整状态信息; 也就是在 make-network-processmake-serial-processmake-pipe-process 中指定的关键字与值列表,只不过部分值反映当前状态而非你指定的初始值。

对于网络进程,返回值包括(完整列表见 make-network-process):

:buffer

关联值为进程缓冲区。

:filter

关联值为进程过滤器函数。See 进程过滤器函数.

:sentinel

关联值为进程哨兵函数。See 哨兵函数:检测进程状态变化.

:remote

连接中,对端的内部格式地址。

:local

本地内部格式地址。

:service

服务器中,如果你为 service 指定了 t,该值为实际端口号。

即使在 make-network-process 中没有显式指定,:local:remote 也会被包含。

串口连接的关键字列表参见 make-serial-processserial-process-configure。管道连接参见 make-pipe-process

如果 key 是一个关键字,函数返回该关键字对应的值。

如果 process 是尚未完全建立的非阻塞网络流,该函数会阻塞直到连接建立。如果提供可选参数 no-block,函数会返回 nil 而不是阻塞。

Function: process-id process

该函数返回 processPID。这是一个整数,用于在当前时刻将该进程与同一台计算机上的其他进程区分开。进程的 PID 由操作系统内核在进程启动时分配,并在进程存在期间保持不变。对于网络、串口和管道连接,该函数返回 nil

Function: process-name process

该函数以字符串形式返回 process 的名称。

Function: process-status process-name

该函数以符号形式返回 process-name 的状态。参数 process-name 必须是进程、缓冲区或进程名(字符串)。

实际子进程的可能取值为:

run

进程正在运行。

stop

进程已停止但可恢复。

exit

进程已退出。

signal

进程收到致命信号。

open

网络、串口或管道连接已打开。

closed

网络、串口或管道连接已关闭。连接关闭后无法重新打开,不过你可以向同一地址新建一个连接。

connect

等待完成的非阻塞连接。

failed

建立失败的非阻塞连接。

listen

正在监听的网络服务器。

nil

process-name 不是现有进程的名称。

(process-status (get-buffer "*shell*"))
     ⇒ run

对于网络、串口或管道连接,process-status 返回 openstopclosed 之一。closed 表示对端关闭了连接,或是 Emacs 执行了 delete-processstop 表示对该连接调用了 stop-process

Function: process-live-p process

如果 process 处于存活状态,该函数返回非空值。状态为 runopenlistenconnectstop 的进程被视为存活。

Function: process-type process

该函数对网络连接或服务器返回符号 network,对串口连接返回 serial,对管道连接返回 pipe,对为运行程序而创建的子进程返回 real

Function: process-exit-status process

该函数返回 process 的退出状态或杀死它的信号编号。(可通过 process-status 的结果判断是哪一种。)如果 process 尚未终止,返回值为 0。对于已关闭的网络、串口和管道连接,值为 0 或 256,取决于连接是正常关闭还是异常关闭。

Function: process-tty-name process &optional stream

该函数返回 process 用于与 Emacs 通信的终端名称;如果使用管道而非 pty,则返回 nil(参见 创建异步进程 中的 process-connection-type)。默认情况下,如果进程的任意标准流使用终端,函数返回该终端名。如果 streamstdinstdoutstderr,函数返回该流专用的终端名(或如上所述为 nil)。你可以用它判断某个流使用的是管道还是 pty。

如果 process 代表运行在远程主机上的程序,该函数返回与该进程通信的**本地**终端名;你可以通过进程属性 remote-tty 获取该程序在远程主机上使用的终端名。如果 process 代表网络、串口或管道连接,该函数始终返回 nil

Function: process-coding-system process

该函数返回一个 cons 单元格 (decode . encode),描述用于解码进程输出和编码进程输入的编码系统(see 编码系统)。

Function: set-process-coding-system process &optional decoding-system encoding-system

该函数指定后续用于进程输出解码和输入编码的编码系统。它使用 decoding-system 解码子进程输出,使用 encoding-system 编码子进程输入。

每个进程还有一个属性列表,可用于存储与进程相关的各类值。

Function: process-get process propname

该函数返回 processpropname 属性值。

Function: process-put process propname value

该函数将 processpropname 属性设为 value

Function: process-plist process

该函数返回 process 的进程属性列表。

Function: set-process-plist process plist

该函数将 process 的进程属性列表设为 plist