pipe 動かない
(define (pipe3 cmd1 args1 cmd2 args2 cmd3 args3) (let-values ([(in1 out1) (%pipe)]) (let-values ([(in2 out2) (%pipe)]) (%spawn cmd1 args1 (list #f out1 #f)) (%spawn cmd2 args2 (list in1 out2 #f)) (%spawn cmd3 args3 (list in2 #f #f)) (close-port in1) (close-port in2) (close-port out1) (close-port out2) (%waitpid -1) (%waitpid -1) (%waitpid -1) ))) (pipe3 "ls" '("-la") "grep" '("cpp") "grep" '("main"))
2個目の waitpid でブロックされてしまう。man を拾い読みするだけでなく一度本を読んだ方が良さそうだ。
解決
(close-port out1) は out1 を使わないプロセスで直後に発行しないとだめ。