Функции создания дочерних процессов
Существует три примитива, создающие новый дочерний процесс для запуска программы. Один из них, make-process, создаёт асинхронный процесс и возвращает объект процесса (см. Асинхронные процессы). Другие два, call-process и call-process-region, создают синхронный процесс и не возвращают объект процесса (см. Синхронные процессы). Существуют различные функции более высокого уровня, которые используют эти примитивы для запуска определённых типов процессов.
Синхронные и асинхронные процессы объясняются в следующих разделах. Поскольку три функции вызываются аналогичным образом, их общие аргументы описаны здесь.
Во всех случаях функции указывают программу, которая должна быть запущена. Ошибка сигнализируется, если файл не найден или не может быть выполнен. Если имя файла относительное, переменная exec-path содержит список директорий для поиска. Emacs инициализирует exec-path при запуске, основываясь на значении переменной окружения PATH. Стандартные конструкции имён файлов, ‘~’, ‘.’, и ‘..’, интерпретируются как обычно в exec-path, но подстановки переменных окружения (‘$HOME’ и т. д.) не распознаются; используйте substitute-in-file-name для их выполнения (см. Расширение имён файлов). nil в этом списке относится к default-directory.
Запуск программы также может попытаться добавить суффиксы к указанному имени:
- Пользовательский параметр: exec-suffixes
Эта переменная является списком суффиксов (строк), которые нужно попробовать добавить к имени указанного файла программы. В список должен входить
""если вы хотите, чтобы имя проверялось точно так, как указано. Значение по умолчанию зависит от системы.
Обратите внимание: Аргумент program содержит только имя файла программы; он не может содержать какие-либо аргументы командной строки. Вы должны использовать отдельный аргумент args для их предоставления, как описано ниже.
Каждая из функций создания дочерних процессов имеет аргумент buffer-or-name, который указывает, куда будет выводиться вывод программы. Это должен быть буфер или имя буфера; если это имя буфера, то буфер будет создан, если он ещё не существует. Это также может быть nil, что означает отбрасывание вывода, если это не обрабатывается пользовательской функцией фильтра. (См. Функции фильтра и Чтение и вывод.) Обычно следует избегать ситуации, когда несколько процессов отправляют вывод в один и тот же буфер, поскольку их вывод будет произвольно перемешиваться. Для синхронных процессов вы можете направить вывод в файл вместо буфера (и соответствующий аргумент поэтому более уместно называется destination). По умолчанию оба потока стандартного вывода и стандартной ошибки направляются в один и тот же пункт назначения, но все 3 примитива позволяют дополнительно направить поток стандартной ошибки в другое место назначения.
Все три функции создания дочерних процессов позволяют указать аргументы командной строки для запуска процесса. Для call-process и call-process-region, эти аргументы представлены в виде аргумента &rest, args. Для make-process, как программа для запуска, так и её аргументы командной строки указываются в виде списка строк. Аргументы командной строки должны быть строками, и они передаются программе как отдельные строки аргументов. Специальные символы подстановок и другие конструкции оболочки не имеют особого значения в этих строках, поскольку строки передаются непосредственно указанной программе.
Дочерний процесс наследует свою среду из Emacs, но вы можете указать переопределения для неё с помощью process-environment. См. Системная среда. Текущий каталог дочернего процесса определяется значением default-directory.
- Переменная: exec-directory
-
Значение этой переменной — строка, имя каталога, содержащего программы, которые поставляются с GNU Emacs и предназначены для вызова Emacs. Программа
movemailявляется примером такой программы; Rmail использует её для получения новых сообщений из папки входящих.
- Пользовательский параметр: exec-path
-
Значение этой переменной — список каталогов, в которых следует искать программы для запуска в дочерних процессах. Каждый элемент — либо имя каталога (т. е. строка), либо
nil, которое обозначает каталог по умолчанию (который является значениемdefault-directory). См. executable-find, для подробностей о данном поиске.Значение
exec-pathиспользуетсяcall-processиstart-process, когда аргумент program не является абсолютным именем файла.В целом, вы не должны изменять
exec-pathнапрямую. Вместо этого убедитесь, что ваша переменная окруженияPATHустановлена должным образом до запуска Emacs. Попытка измененияexec-pathнезависимо отPATHможет привести к путанице.
- Функция: exec-path
Эта функция является расширением переменной
exec-path. Еслиdefault-directoryуказывает на удалённый каталог, эта функция возвращает список каталогов, используемых для поиска программ на соответствующем удалённом хосте. В случае локальногоdefault-directory, функция возвращает только значение переменнойexec-path.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Subprocess-Creation.html