Function: delete-process

delete-process is a function defined in process.c.

Signature

(delete-process PROCESS)

Documentation

Delete PROCESS: kill it and forget about it immediately.

PROCESS may be a process, a buffer, the name of a process or buffer, or nil, indicating the current buffer's process.

Other relevant functions are documented in the process group.

Probably introduced at or before Emacs version 22.1.

Shortdoc

;; process
(delete-process process)

Source Code

// Defined in /usr/src/emacs/src/process.c
{
  register struct Lisp_Process *p;

  process = get_process (process);
  p = XPROCESS (process);

#ifdef HAVE_GETADDRINFO_A
  if (p->dns_request)
    {
      /* Cancel the request.  Unless shutting down, wait until
	 completion.  Free the request if completely canceled. */

      bool canceled = gai_cancel (p->dns_request) != EAI_NOTCANCELED;
      if (!canceled && !inhibit_sentinels)
	{
	  struct gaicb const *req = p->dns_request;
	  while (gai_suspend (&req, 1, NULL) != 0)
	    continue;
	  canceled = true;
	}
      if (canceled)
	free_dns_request (process);
    }
#endif

  p->raw_status_new = 0;
  if (NETCONN1_P (p) || SERIALCONN1_P (p) || PIPECONN1_P (p))
    {
      pset_status (p, list2 (Qexit, make_fixnum (0)));
      p->tick = ++process_tick;
      status_notify (p, NULL);
      redisplay_preserve_echo_area (13);
    }
  else
    {
      if (p->alive)
	record_kill_process (p, Qnil);

      if (p->infd >= 0)
	{
	  /* Update P's status, since record_kill_process will make the
	     SIGCHLD handler update deleted_pid_list, not *P.  */
	  Lisp_Object symbol;
	  if (p->raw_status_new)
	    update_status (p);
	  symbol = CONSP (p->status) ? XCAR (p->status) : p->status;
	  if (! (EQ (symbol, Qsignal) || EQ (symbol, Qexit)))
	    pset_status (p, list2 (Qsignal, make_fixnum (SIGKILL)));

	  p->tick = ++process_tick;
	  status_notify (p, NULL);
	  redisplay_preserve_echo_area (13);
	}
    }
  remove_process (process);
  return Qnil;
}