终止 Emacs 意为结束 Emacs 进程的运行。
如果你是从终端启动 Emacs,通常父进程会重新获得控制权。
用于终止 Emacs 的底层原语是 kill-emacs。
该命令先运行钩子 kill-emacs-hook,然后退出并终止 Emacs 进程。
如果 exit-data 为整数,该值将作为 Emacs 进程的退出状态码。 (这主要在批处理操作中有用;参见 批处理模式。)
如果 exit-data 为字符串,其内容会被写入终端输入缓冲区, 以便 Shell(或接下来读取输入的其他程序)读取。
如果 exit-data 既非整数也非字符串,或是被省略, 则使用系统特定的、表示程序正常结束的退出状态码。
如果 restart 为非 nil,则在最后不会直接退出,
而是使用与当前运行的 Emacs 进程相同的命令行参数,启动一个新的 Emacs 进程。
kill-emacs 函数通常通过上层命令 C-x C-c
(save-buffers-kill-terminal)调用。See Exiting in The GNU Emacs Manual。当 Emacs 接收到 SIGTERM 或 SIGHUP 操作系统信号时
(例如控制终端断开连接),或是在批处理模式下接收到 SIGINT 信号时,
该函数也会被自动调用(see 批处理模式)。
这个常规钩子由 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 进程。