除了访问和操作属于当前 Emacs 会话的子进程外,Emacs Lisp 程序还可以访问系统中的其他进程。我们将这些称为系统进程(ystem processes),以与 Emacs 子进程区分。
Emacs 提供若干原语用于访问系统进程。并非所有平台都支持这些原语;不支持的平台上,这些原语会返回 nil。
该函数返回系统上正在运行的所有进程的列表。每个进程由其 PID 标识,即操作系统分配的数字型进程 ID,用于在同一时刻同一台机器上唯一区分各个进程。
若 default-directory 指向远程主机,则返回该主机上的进程。
该函数返回进程 ID 为 pid 的进程的属性关联列表。关联列表中的每个元素格式为 (key . value),其中 key 表示属性名称,value 为对应属性的值。下面列出该函数可能返回的各类属性 key。并非所有平台都支持全部属性;若某个属性不被支持,其关联项不会出现在返回的关联列表中。
若 default-directory 指向远程主机,则 pid 被视为该远程主机上的进程 ID。
euid运行该进程的用户的有效用户 ID,对应 value 为数字。若进程由运行当前 Emacs 会话的同一用户启动,该值与 user-uid 返回结果相同(see 用户标识)。
user与进程有效用户 ID 对应的用户名,为字符串。
egid有效用户 ID 对应的组 ID,为数字。
group与有效用户组 ID 对应的组名,为字符串。
comm进程中运行的命令名称。通常是进程可执行文件的名称(不含路径),字符串类型。但部分特殊系统进程可能返回与程序可执行文件无关的字符串。
state进程状态码,为简短字符串,用于表示进程的调度状态。常见状态码如下:
"D"不可中断睡眠(通常为 I/O 操作)
"R"运行中
"S"可中断睡眠(等待某事件)
"T"已暂停,例如被作业控制信号暂停
"Z"僵尸进程:已终止但未被父进程回收的进程
完整状态列表可参考 ps 命令手册。
ppid父进程的进程 ID,为数字。
pgrp进程所属的进程组 ID,为数字。
sess进程的会话 ID,为数字,即该进程会话领头进程(session leader)的 PID。
ttname进程控制终端名称,字符串。在类 Unix 与 GNU 系统上,通常为对应终端设备的文件名,如 /dev/pts65。
tpgid使用该进程终端的前台进程组的数字 ID。
minflt进程自启动以来产生的次要页错误数量(次要页错误无需读取磁盘)。
majflt进程自启动以来产生的主要页错误数量(主要页错误需要磁盘读取,开销高于次要页错误)。
cminfltcmajflt与 minflt 和 majflt 类似,但包含该进程所有子进程的页错误数量。
utime进程在用户态运行应用代码所消耗的时间,对应 value 为 Lisp 时间戳(see 时刻)。
stime进程在内核态处理系统调用所消耗的时间,对应 value 为 Lisp 时间戳。
timeutime 与 stime 之和,对应 value 为 Lisp 时间戳。
cutimecstimectime与 utime、stime、time 类似,但包含该进程所有子进程的对应时间。
pri进程的数字优先级。
nice进程的nice 值,数字。nice 值越小,进程调度优先级越高。
thcount进程中的线程数量。
start进程启动时间,以 Lisp 时间戳表示。
etime进程自启动以来经过的时间,以 Lisp 时间戳表示。
vsize进程虚拟内存大小,单位为 KB。
rss进程常驻集(resident set)大小,即进程在物理内存中占用的 KB 数量。
pcpu进程自启动以来占用 CPU 时间的百分比。对应 value 为非负浮点数。理论上多核平台该值可超过 100%,但因 Emacs 通常单线程运行,实际一般小于 100%。
pmem进程常驻集占用系统总物理内存的百分比,值为 0 到 100 之间的浮点数。
args启动进程时使用的命令行参数。字符串格式,各参数以空格分隔;参数中包含的空白字符会按系统 Shell 规则适当转义:GNU/Unix 平台使用反斜杠转义,Windows 平台使用双引号包裹。因此该字符串可直接用于 shell-command 等原语。