;; Suggested by DerGreatMoritz (use posix) (define (async thunk) (receive (in out) (create-pipe) (process-fork (lambda () (file-close in) (thunk) (file-close out))) (file-close out) in)) (define (wait fd) (file-select (list fd) (list)) (file-close fd)) (define proc1 (async (lambda () (print "Hi from proc1") (system "sleep 2") (print "proc1 done sleeping 2 secs")))) (define proc2 (async (lambda () (print "Hi from proc2") (system "sleep 1") (print "proc2 done sleeping 1 sec")))) (wait proc1) (wait proc2) (print "all done!")