(use posix srfi-18) (define (process& cmd . args) (thread-start! (make-thread (lambda () (print "Running " cmd) (let-values (((in out pid) (process cmd args))) (let loop () (let-values (((pid exit? status) (process-wait pid 'nohang))) (if (zero? pid) (begin (thread-sleep! 0.01) (loop)) (and exit? status))))))))) (let ((s1 (process& "/bin/sleep" "2")) (s2 (process& "/bin/sleep" "2"))) (pp (thread-join! s1)) (pp (thread-join! s2)))