diff --git a/uiop/run-program.lisp b/uiop/run-program.lisp
index 4d0565e6e8f7514aca20b62c5ad44c4b043567a4..4532196d37f7f1431af5ddbaa6d9c9d6f46395ad 100644
--- a/uiop/run-program.lisp
+++ b/uiop/run-program.lisp
@@ -573,7 +573,9 @@ It returns a process-info plist with possible keys:
             #+(or cmu scl) (ext:process-wait process)
             #+sbcl (sb-ext:process-wait process)
             ;; 2- extract result
-            #+allegro (sys:reap-os-subprocess :pid process :wait t)
+            #+allegro (multiple-value-bind (exit-code pid signal)
+                          (sys:reap-os-subprocess :pid process :wait t)
+                        (or signal exit-code))
             #+clozure (nth-value 1 (ccl:external-process-status process))
             #+(or cmu scl) (ext:process-exit-code process)
             #+(or clasp ecl) (nth-value 1 (ext:external-process-wait process t))