~ruther/guix-local

d656c14ec9ed9ec68abeb68e98e9eaa602d9e11e — Ludovic Courtès 11 years ago 66d5d8c
services: user-processes: Wait for complete process termination.

* gnu/services/base.scm (user-processes-service): Add 'wait' loop.
1 files changed, 11 insertions(+), 0 deletions(-)

M gnu/services/base.scm
M gnu/services/base.scm => gnu/services/base.scm +11 -0
@@ 182,6 182,8 @@ stopped before 'kill' is called."
                                             (@ (ice-9 rdelim) read-string))))
                             '()))

                       (define lset= (@ (srfi srfi-1) lset=))

                       ;; When this happens, all the processes have been
                       ;; killed, including 'deco', so DMD-OUTPUT-PORT and
                       ;; thus CURRENT-OUTPUT-PORT are dangling.


@@ 206,6 208,15 @@ stopped before 'kill' is called."
                             (kill-except omitted-pids SIGKILL)
                             (delete-file #$%do-not-kill-file)))

                       (let wait ()
                         (let ((pids (processes)))
                           (unless (lset= = pids (cons 1 omitted-pids))
                             (format #t "waiting for process termination\
 (processes left: ~s)~%"
                                     pids)
                             (sleep 2)
                             (wait))))

                       (display "all processes have been terminated\n")
                       #f))
             (respawn? #f)))))