41.5 Удаление процессов

Удаление процесса немедленно разрывает соединение Emacs с дочерним процессом. Процессы удаляются автоматически после их завершения, но не обязательно сразу. Вы можете удалить процесс явно в любой момент. Если вы явно удаляете завершённый процесс до его автоматического удаления, это не причиняет вреда. Удаление работающего процесса отправляет сигнал для его завершения (и его дочерних процессов, если они есть) и вызывает сторожевую функцию процесса. См. Сторожевые функции: отслеживание изменений состояния процесса.

Когда процесс удалён, сам объект процесса продолжает существовать, пока другие объекты Lisp ссылаются на него. Все примитивы Lisp, работающие с объектами процессов, принимают удалённые процессы, но те из них, которые выполняют ввод-вывод или отправляют сигналы, выдают ошибку. Маркер процесса продолжает указывать на то же место, что и раньше, обычно в буфер, куда вставлялся вывод процесса.

Параметр пользователя: delete-exited-processes

Эта переменная управляет автоматическим удалением процессов, которые завершились (в результате вызова exit или сигнала). Если она равна nil, то они продолжают существовать, пока пользователь не выполнит list-processes. В противном случае они удаляются сразу после завершения.

Функция: delete-process &optional process

Эта функция удаляет процесс, завершая его сигналом SIGKILL, если процесс выполнял программу. Аргумент может быть процессом, именем процесса, буфером или именем буфера. (Буфер или имя буфера обозначают процесс, который возвращает get-buffer-process, а отсутствующий или равный nil аргумент process означает, что следует завершить процесс текущего буфера.) Вызов delete-process для работающего процесса завершает его, обновляет статус процесса и немедленно вызывает сторожевую функцию. Если процесс уже завершился, вызов delete-process не влияет на его статус и на выполнение его сторожевой функции (которая будет вызвана рано или поздно).

Если объект процесса представляет сетевое, последовательное или канальное соединение, его статус меняется на closed; в противном случае он меняется на signal, если только процесс уже не завершился. См. process-status.

(delete-process "*shell*")
     ⇒ nil