Replace kill subprocess with direct process-kill syscall via FFI
ober
48e282be5519721f14f321b3cfba43b5ed9c661a
--- 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 --- 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)))))))))) --- 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