Replace kill subprocess with direct process-kill syscall via FFI

ober

48e282be5519721f14f321b3cfba43b5ed9c661a

diff --git a/lib/jerboa-emacs/qt/commands-parity3b.sls b/lib/jerboa-emacs/qt/commands-parity3b.sls
index c0f9590..610c12d 100644
--- a/lib/jerboa-emacs/qt/commands-parity3b.sls
+++ b/lib/jerboa-emacs/qt/commands-parity3b.sls
@@ -91,6 +91,8 @@
    (except (std srfi srfi-13) string-join string-trim
      string-prefix? string-suffix? string-contains string-index)
    (std misc string) (std misc ports) (std text json)
+   (only (std misc process) process-kill)
+   (only (std os signal) signal-names)
    (jerboa-emacs qt sci-shim) (jerboa-emacs core)
    (jerboa-emacs editor) (jerboa-emacs qt buffer)
    (jerboa-emacs qt window) (jerboa-emacs qt echo)
@@ -418,15 +420,15 @@
                          (with-output-to-string
                            (lambda () (display-exception e))))))
                    (lambda ()
-                     (let* ([proc (open-process
-                                    (list 'path: "kill" 'arguments:
-                                      (list
-                                        (string-append "-" signal)
-                                        pid-str)
-                                      'stdout-redirection: #t
-                                      'stderr-redirection: #t))]
-                            [out (read-line proc #f)])
-                       (close-port proc)
+                     (let* ([sig-name (string-append "SIG" signal)]
+                            [sig-pair (find
+                                        (lambda (p)
+                                          (string=? (cdr p) sig-name))
+                                        signal-names)]
+                            [sig-num (if sig-pair
+                                         (car sig-pair)
+                                         (error "Unknown signal" signal))])
+                       (process-kill (string->number pid-str) sig-num)
                        (echo-message!
                          echo
                          (string-append
diff --git a/src/jerboa-emacs/editor-extra-media2.ss b/src/jerboa-emacs/editor-extra-media2.ss
index 7e2a374..aa2c166 100644
--- a/src/jerboa-emacs/editor-extra-media2.ss
+++ b/src/jerboa-emacs/editor-extra-media2.ss
@@ -7,6 +7,8 @@
 (import :std/sugar
         :std/sort
         :std/srfi/13
+        (only-in :std/misc/process process-kill)
+        (only-in :std/os/signal signal-names)
         :chez-scintilla/constants
         :chez-scintilla/scintilla
         :chez-scintilla/tui
@@ -644,11 +646,11 @@
           (with-exception-catcher
             (lambda (e) (echo-error! (app-state-echo app) "Failed to send signal"))
             (lambda ()
-              (let ((proc (open-process
-                            (list path: "kill"
-                                  arguments: (list (string-append "-" signal) pid-str)
-                                  stdin-redirection: #f stdout-redirection: #t stderr-redirection: #t))))
-                (process-status proc)
+              (let* ((sig-name (string-append "SIG" signal))
+                     (sig-pair (find (lambda (p) (string=? (cdr p) sig-name)) signal-names))
+                     (sig-num (if sig-pair (car sig-pair)
+                                (error "Unknown signal" signal))))
+                (process-kill (string->number pid-str) sig-num)
                 (echo-message! (app-state-echo app)
                   (string-append "Sent SIG" signal " to PID " pid-str))))))))))
 
diff --git a/src/jerboa-emacs/qt/commands-parity3b.ss b/src/jerboa-emacs/qt/commands-parity3b.ss
index 7351742..6721c25 100644
--- a/src/jerboa-emacs/qt/commands-parity3b.ss
+++ b/src/jerboa-emacs/qt/commands-parity3b.ss
@@ -12,6 +12,8 @@
         :std/misc/string
         :std/misc/ports
         :std/text/json
+        (only-in :std/misc/process process-kill)
+        (only-in :std/os/signal signal-names)
         :jerboa-emacs/qt/sci-shim
         :jerboa-emacs/core
         :jerboa-emacs/editor
@@ -285,12 +287,11 @@
             (lambda (e) (echo-message! echo (string-append "Error sending signal: "
                                               (with-output-to-string(lambda () (display-exception e))))))
             (lambda ()
-              (let* ((proc (open-process
-                             (list path: "kill" arguments: (list (string-append "-" signal) pid-str)
-                                   stdout-redirection: #t stderr-redirection: #t)))
-                     (out (read-line proc #f)))
-                ;; Omit process-status (Qt SIGCHLD race) — assume success if no exception
-                (close-port proc)
+              (let* ((sig-name (string-append "SIG" signal))
+                     (sig-pair (find (lambda (p) (string=? (cdr p) sig-name)) signal-names))
+                     (sig-num (if sig-pair (car sig-pair)
+                                (error "Unknown signal" signal))))
+                (process-kill (string->number pid-str) sig-num)
                 (echo-message! echo (string-append "Sent SIG" signal " to PID " pid-str))))))))))
 
 ;; Calculator