41.6 Информация о процессе

Несколько функций возвращают информацию о процессах.

Команда: list-processes &optional query-only buffer

Эта команда отображает список всех живых процессов. Кроме того, она окончательно удаляет все процессы, статус которых был ‘Exited’ (Завершён) или ‘Signaled’ (Завершён по сигналу). Возвращает nil.

Процессы отображаются в буфере с именем *Process List* (если вы не укажете иное с помощью необязательного аргумента buffer), основной режим которого — режим меню процессов (Process Menu mode).

Если query-only не равен nil, отображаются только процессы, флаг запроса которых не равен nil. См. Запрос перед завершением.

Функция: process-list

Эта функция возвращает список всех процессов, которые не были удалены.

(process-list)
     ⇒ (#<process display-time> #<process shell>)
Функция: num-processors &optional query

Эта функция возвращает количество процессоров — положительное целое число. Каждый используемый поток выполнения считается процессором. По умолчанию подсчёт включает количество доступных процессоров, которое вы можете переопределить, установив OMP_NUM_THREADS — переменную окружения OpenMP. Если необязательный аргумент query равен current, эта функция игнорирует OMP_NUM_THREADS; если query равен all, эта функция также подсчитывает процессоры, которые есть в системе, но недоступны текущему процессу.

Функция: get-process name

Эта функция возвращает процесс с именем name (строка) или nil, если такого нет. Аргумент name также может быть объектом процесса; в этом случае он же и возвращается.

(get-process "shell")
     ⇒ #<process shell>
Функция: process-command process

Эта функция возвращает команду, которая была запущена для запуска process. Это список строк, первая строка — исполняемая программа, остальные строки — аргументы, переданные программе. Для сетевого, последовательного или канального соединения возвращается либо nil (процесс работает), либо t (процесс остановлен).

(process-command (get-process "shell"))
     ⇒ ("bash" "-i")
Функция: process-contact process &optional key no-block

Эта функция возвращает информацию о том, как было установлено сетевое, последовательное или канальное соединение. Когда key равен nil, возвращается (hostname service) для сетевого соединения, (port speed) для последовательного соединения и t для канального соединения. Для обычного дочернего процесса эта функция всегда возвращает t при вызове с key равным nil.

Если key равен t, возвращается полная информация о состоянии соединения, сервера, последовательного порта или канала; то есть список ключевых слов и значений, указанных в make-network-process, make-serial-process или make-pipe-process, за исключением того, что некоторые значения отражают текущее состояние, а не заданные вами.

Для сетевого процесса значения включают (полный список см. в make-network-process):

:buffer

Соответствующее значение — буфер процесса.

:filter

Соответствующее значение — функция фильтра процесса. См. Функции фильтрации процессов.

:sentinel

Соответствующее значение — функция-часовой процесса. См. Часовые: отслеживание изменений состояния процесса.

:remote

В соединении — адрес удалённого узла во внутреннем формате.

:local

Локальный адрес во внутреннем формате.

:service

На сервере, если вы указали t для service, это значение — фактический номер порта.

:local и :remote включаются, даже если они не были явно указаны в make-network-process.

Для последовательного соединения список ключей см. в make-serial-process и serial-process-configure. Для канального соединения список ключей см. в make-pipe-process.

Если key является ключевым словом, функция возвращает значение, соответствующее этому ключевому слову.

Если process является неблокирующим сетевым потоком, который ещё полностью не настроен, эта функция будет блокироваться до завершения настройки. Если задан необязательный параметр no-block, эта функция вернёт nil вместо блокировки.

Функция: process-id process

Эта функция возвращает PID (идентификатор) процесса process. Это целое число, которое отличает процесс process от всех других процессов, работающих на том же компьютере в текущий момент. PID процесса выбирается ядром операционной системы при запуске процесса и остаётся постоянным, пока процесс существует. Для сетевых, последовательных и канальных соединений эта функция возвращает nil.

Функция: process-name process

Эта функция возвращает имя процесса process в виде строки.

Функция: 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 возвращает один из символов open, stop или closed. Последний означает, что другая сторона закрыла соединение или Emacs выполнил delete-process. Значение stop означает, что к соединению была применена команда stop-process.

Функция: process-live-p process

Эта функция возвращает не nil, если process жив. Процесс считается живым, если его статус — run, open, listen, connect или stop.

Функция: process-type process

Эта функция возвращает символ network для сетевого соединения или сервера, serial для соединения через последовательный порт, pipe для канального соединения или real для дочернего процесса, созданного для запуска программы.

Функция: process-exit-status process

Эта функция возвращает код завершения процесса process или номер сигнала, который его завершил. (Используйте результат process-status, чтобы определить, что именно возвращено.) Если process ещё не завершился, значение равно 0. Для сетевых, последовательных и канальных соединений, которые уже закрыты, значение равно 0 или 256, в зависимости от того, было ли соединение закрыто нормально или аномально.

Функция: process-tty-name process &optional stream

Эта функция возвращает имя терминала, которое process использует для связи с Emacs, или nil, если вместо псевдотерминала (pty) используются каналы (см. process-connection-type в Создание асинхронного процесса). По умолчанию эта функция возвращает имя терминала, если какой-либо из стандартных потоков process использует терминал. Если stream равен одному из значений stdin, stdout или stderr, эта функция возвращает имя терминала (или nil, как указано выше), которое process использует именно для этого потока. Это позволяет определить, использует ли конкретный поток канал или псевдотерминал.

Если process представляет программу, работающую на удалённом хосте, эта функция возвращает локальное имя терминала, через которое осуществляется связь с process; имя терминала, используемое этой программой на удалённом хосте, можно получить через свойство процесса remote-tty. Если process представляет сетевое, последовательное или канальное соединение, эта функция всегда возвращает nil.

Функция: process-coding-system process

Эта функция возвращает ячейку cons (decode . encode), описывающую кодировки, используемые для декодирования вывода из process и кодирования ввода в process (см. Системы кодирования).

Функция: set-process-coding-system process &optional decoding-system encoding-system

Эта функция задаёт кодировки для последующего вывода из process и ввода в process. Она будет использовать decoding-system для декодирования вывода дочернего процесса и encoding-system для кодирования ввода в дочерний процесс.

Каждый процесс также имеет список свойств (property list), который можно использовать для хранения различных значений, связанных с процессом.

Функция: process-get process propname

Эта функция возвращает значение свойства propname процесса process.

Функция: process-put process propname value

Эта функция устанавливает значение свойства propname процесса process равным value.

Функция: process-plist process

Эта функция возвращает список свойств (plist) процесса process.

Функция: set-process-plist process plist

Эта функция устанавливает список свойств процесса process равным plist.