43.2.1 Завершение работы Emacs

Завершение работы Emacs означает прекращение выполнения процесса Emacs. Если вы запустили Emacs из терминала, родительский процесс обычно возобновляет управление. Низкоуровневый примитив для завершения работы Emacs — kill-emacs.

Команда: kill-emacs &optional exit-data restart

Эта команда вызывает хук 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-hook

Этот обычный хук выполняется kill-emacs перед тем, как завершить работу Emacs.

Поскольку kill-emacs может быть вызван в ситуациях, когда невозможно взаимодействие с пользователем (например, когда терминал отключен), функции в этом хуке не должны пытаться взаимодействовать с пользователем. Если вы хотите взаимодействовать с пользователем при завершении работы Emacs, используйте kill-emacs-query-functions, описанные ниже.

Когда Emacs завершается, вся информация в процессе Emacs, за исключением сохраненных файлов, теряется. Поскольку непреднамеренное завершение работы Emacs может привести к потере большого объема работы, команда save-buffers-kill-terminal запрашивает подтверждение, если у вас есть буферы, которые необходимо сохранить, или запущенные подпроцессы. Она также выполняет аномальный хук kill-emacs-query-functions:

Пользовательский вариант: kill-emacs-query-functions

Когда save-buffers-kill-terminal завершает работу Emacs, он вызывает функции в этом хуке после того, как задает стандартные вопросы, и перед вызовом kill-emacs. Функции вызываются в порядке появления, без аргументов. Каждая функция может запросить дополнительное подтверждение у пользователя. Если любая из них возвращает nil, save-buffers-kill-emacs не завершает работу Emacs и не выполняет оставшиеся функции в этом хуке. Прямой вызов kill-emacs не вызывает этот хук.

Команда: restart-emacs

Эта команда делает то же самое, что и save-buffers-kill-emacs, но вместо простого завершения текущего процесса Emacs в конце она перезапустит новый процесс Emacs, используя те же аргументы командной строки, что и в текущем запущенном процессе Emacs.