From ffa4c799f7f8d9012eb9fc691f7591857b31f2cc Mon Sep 17 00:00:00 2001 From: Pierre Neidhardt Date: Thu, 14 Jan 2021 17:09:00 +0100 Subject: [PATCH] ambrevar/shell: Rename kill to system-signal, add kill, term. --- .../common-lisp/source/ambrevar/shell.lisp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/.local/share/common-lisp/source/ambrevar/shell.lisp b/.local/share/common-lisp/source/ambrevar/shell.lisp index 6f48e45b..6f7fb773 100644 --- a/.local/share/common-lisp/source/ambrevar/shell.lisp +++ b/.local/share/common-lisp/source/ambrevar/shell.lisp @@ -181,20 +181,29 @@ Return the first non-deleted directory." (uiop:ensure-all-directories-exist (list (uiop:ensure-directory-pathname path))) path) -(defun kill (pids &key (signal 'term) options) +(defun system-signal (pid-or-pids &key (signal 'term) options) "OPTIONS are PKILL options." ;; TODO: Is it possible to kill a group without pkill, maybe with osicat? (uiop:run-program (append (list (if options "pkill" "kill") (format nil "-~a" signal)) options - (mapcar #'princ-to-string pids)))) + (mapcar #'princ-to-string (alex:ensure-list pid-or-pids))))) + +(defun kill (pid-or-pids) + "Kill PID-OR-PIDS (with SIGKILL)." + (system-signal pid-or-pids :signal 'kill)) + +(defun term (pid-or-pids) + "Cleanly terminate PID-OR-PIDS." + (system-signal pid-or-pids :signal 'term)) (defun terminate-process-with-group (process-info) (when (uiop:process-alive-p process-info) - (kill (list (format nil "~a" (osicat-posix:getpgid (uiop:process-info-pid process-info)))) - :signal 'term ;TODO: -KILL instead? - :options '("-g")) + (system-signal + (list (format nil "~a" (osicat-posix:getpgid (uiop:process-info-pid process-info)))) + :signal 'term ;TODO: -KILL instead? + :options '("-g")) (uiop:terminate-process process-info))) (defvar *process-list* '()