41.12 Доступ к другим процессам

Помимо доступа к процессам, являющимся дочерними процессами текущего сеанса Emacs, и управления ими, программы на Emacs Lisp могут также получать доступ к другим процессам. Мы называем их системными процессами, чтобы отличать от дочерних процессов Emacs.

Emacs предоставляет несколько примитивов для доступа к системным процессам. Не все платформы поддерживают эти примитивы; на тех, где они не поддерживаются, эти примитивы возвращают nil.

Функция: list-system-processes

Эта функция возвращает список всех процессов, работающих в системе. Каждый процесс идентифицируется своим PID — числовым идентификатором процесса, который назначается ОС и отличает данный процесс от всех остальных процессов, работающих на той же машине в то же время.

Если default-directory указывает на удалённый хост, возвращаются процессы этого хоста.

Функция: process-attributes pid

Эта функция возвращает ассоциативный список атрибутов для процесса, заданного его идентификатором pid. Каждая пара в ассоциативном списке имеет вид (ключ . значение), где ключ обозначает атрибут, а значение — значение этого атрибута. Различные ключи атрибутов, которые может возвращать эта функция, перечислены ниже. Не все платформы поддерживают все эти атрибуты; если атрибут не поддерживается, его пара не появится в возвращаемом ассоциативном списке.

Если default-directory указывает на удалённый хост, pid рассматривается как процесс этого хоста.

euid

Эффективный идентификатор пользователя, вызвавшего процесс. Соответствующее значение — число. Если процесс был вызван тем же пользователем, который запустил текущий сеанс Emacs, значение идентично тому, что возвращает user-uid (см. Идентификация пользователя).

user

Имя пользователя, соответствующее эффективному идентификатору пользователя процесса, строка.

egid

Идентификатор группы эффективного пользователя, число.

group

Имя группы, соответствующее идентификатору группы эффективного пользователя, строка.

comm

Имя команды, выполняемой в процессе. Это строка, которая обычно указывает имя исполняемого файла процесса без ведущих каталогов. Однако некоторые специальные системные процессы могут сообщать строки, не соответствующие исполняемому файлу программы.

state

Код состояния процесса. Это короткая строка, кодирующая состояние планирования процесса. Вот список наиболее часто встречающихся кодов:

"D"

непрерываемый сон (обычно ввод-вывод)

"R"

выполняется

"S"

прерываемый сон (ожидание какого-либо события)

"T"

остановлен, например, сигналом управления заданиями

"Z"

зомби: процесс, который завершился, но не был обработан родителем

Полный список возможных состояний см. на странице руководства команды ps.

ppid

Идентификатор родительского процесса, число.

pgrp

Идентификатор группы процессов, число.

sess

Идентификатор сеанса процесса. Это число, равное идентификатору лидера сеанса процесса.

ttname

Строка с именем управляющего терминала процесса. В системах Unix и GNU это обычно имя файла соответствующего терминального устройства, например /dev/pts65.

tpgid

Числовой идентификатор группы процессов фоновой группы, использующей терминал процесса.

minflt

Количество мелких ошибок страниц, вызванных процессом с момента его запуска. (Мелкие ошибки страниц не требуют чтения с диска.)

majflt

Количество крупных ошибок страниц, вызванных процессом с момента его запуска. (Крупные ошибки страниц требуют чтения с диска и, следовательно, дороже мелких.)

cminflt
cmajflt

Как minflt и majflt, но включают количество ошибок страниц для всех дочерних процессов данного процесса.

utime

Время, затраченное процессом в пользовательском контексте на выполнение кода приложения. Соответствующее значение — временная метка Lisp (см. Время суток).

stime

Время, затраченное процессом в контексте системы (ядра) на обработку системных вызовов. Соответствующее значение — временная метка Lisp.

time

Сумма utime и stime. Соответствующее значение — временная метка Lisp.

cutime
cstime
ctime

Как utime, stime и time, но включают время всех дочерних процессов данного процесса.

pri

Числовой приоритет процесса.

nice

Значение nice процесса, число. (Процессы с меньшими значениями nice получают более благоприятное планирование.)

thcount

Количество потоков в процессе.

start

Время запуска процесса в виде временной метки Lisp.

etime

Время, прошедшее с момента запуска процесса, в виде временной метки Lisp.

vsize

Размер виртуальной памяти процесса, измеряемый в килобайтах.

rss

Размер резидентного набора процесса — количество килобайт, занимаемых процессом в физической памяти машины.

pcpu

Процент использования процессорного времени процессом с момента его запуска. Соответствующее значение — неотрицательное число с плавающей запятой. Хотя теоретически это число может превышать 100 на многоядерной платформе, обычно оно меньше 100, поскольку Emacs, как правило, однопоточный.

pmem

Процент от общего объёма физической памяти, установленной на машине, используемый резидентным набором процесса. Значение — число с плавающей запятой от 0 до 100.

args

Командная строка, с которой был вызван процесс. Это строка, в которой отдельные аргументы командной строки разделены пробелами; пробельные символы, встроенные в аргументы, экранируются соответствующим образом для системной оболочки: с помощью обратной косой черты в GNU и Unix и заключаются в двойные кавычки в Windows. Таким образом, эта строка командной строки может быть непосредственно использована в примитивах, таких как shell-command.