Завершение работы Emacs означает прекращение выполнения процесса Emacs.
Если вы запустили Emacs из терминала, родительский процесс обычно
возобновляет управление. Низкоуровневый примитив для завершения работы Emacs —
kill-emacs.
Эта команда вызывает хук kill-emacs-hook, а затем завершает
процесс Emacs и убивает его.
Если exit-data является целым числом, оно используется как код выхода процесса Emacs. (Это в основном полезно при пакетной обработке; см. Пактовый режим.)
Если exit-data является строкой, ее содержимое помещается в буфер ввода терминала, чтобы оболочка (или любая программа, которая затем считывает ввод) могла его прочитать.
Если exit-data не является ни целым числом, ни строкой, или оно опущено, это означает использование (специфического для системы) кода выхода, указывающего на успешное завершение работы программы.
Если restart не равно nil, вместо простого
завершения в конце запускается новый процесс Emacs, используя те же аргументы
командной строки, что и в текущем запущенном процессе Emacs.
Функция kill-emacs обычно вызывается через более высокоуровневую
команду C-x C-c
(save-buffers-kill-terminal). См. Выход в Руководство GNU Emacs. Она также вызывается автоматически, если Emacs получает системный сигнал
SIGTERM или SIGHUP (например, когда отключается
контролируемый терминал), или если он получает сигнал
SIGINT во время работы в пакетном режиме (см. Пактовый режим).
Этот обычный хук выполняется kill-emacs перед тем, как
завершить работу Emacs.
Поскольку kill-emacs может быть вызван в ситуациях, когда
невозможно взаимодействие с пользователем (например, когда терминал отключен),
функции в этом хуке не должны пытаться взаимодействовать с пользователем.
Если вы хотите взаимодействовать с пользователем при завершении работы Emacs,
используйте kill-emacs-query-functions, описанные ниже.
Когда Emacs завершается, вся информация в процессе Emacs, за исключением
сохраненных файлов, теряется. Поскольку непреднамеренное завершение работы Emacs
может привести к потере большого объема работы, команда
save-buffers-kill-terminal запрашивает подтверждение, если
у вас есть буферы, которые необходимо сохранить, или запущенные подпроцессы.
Она также выполняет аномальный хук kill-emacs-query-functions:
Когда save-buffers-kill-terminal завершает работу Emacs,
он вызывает функции в этом хуке после того, как задает стандартные вопросы, и
перед вызовом kill-emacs. Функции вызываются в порядке
появления, без аргументов. Каждая функция может запросить дополнительное
подтверждение у пользователя. Если любая из них возвращает nil,
save-buffers-kill-emacs не завершает работу Emacs и не
выполняет оставшиеся функции в этом хуке. Прямой вызов kill-emacs
не вызывает этот хук.
Эта команда делает то же самое, что и save-buffers-kill-emacs,
но вместо простого завершения текущего процесса Emacs в конце она перезапустит
новый процесс Emacs, используя те же аргументы командной строки, что и в
текущем запущенном процессе Emacs.