删除进程(Deleting a process) 会立即断开 Emacs 与子进程的连接。进程在终止后会被自动删除,但不一定是立刻删除。你可以在任何时候显式删除一个进程。如果在自动删除之前手动删除一个已终止进程,不会产生任何问题。删除一个正在运行的进程会发送信号使其终止(以及它的子进程,如果有的话),并调用进程哨兵函数。See 哨兵函数:检测进程状态变化.
进程被删除后,只要还有其他 Lisp 对象指向它,进程对象本身就会继续存在。所有作用于进程对象的 Lisp 原语都可以接受已删除的进程,但那些执行 I/O 或发送信号的操作会报错。进程标记依旧指向原来的位置,通常是进程输出被插入的某个缓冲区。
该变量控制已终止进程(因调用 exit 或信号而结束)的自动删除行为。如果为 nil,这些进程会继续存在直到用户运行 list-processes。否则,它们会在退出后立即被删除。
该函数删除一个进程,如果进程正在运行程序,则用 SIGKILL 信号将其杀死。参数可以是一个进程、进程名、缓冲区或缓冲区名。(缓冲区或缓冲区名对应 get-buffer-process 返回的进程;process 省略或为 nil 表示杀死当前缓冲区的进程。)对运行中的进程调用 delete-process 会终止它、更新进程状态并立即运行哨兵函数。如果进程已经终止,调用 delete-process 不会改变其状态,也不会影响哨兵函数的运行(它迟早会运行)。
如果进程对象代表网络、串口或管道连接,其状态会变为 closed;否则变为 signal,除非进程已经退出。See process-status.
(delete-process "*shell*")
⇒ nil