将stdin传递给subprocess时,NodeJS进程永远不会结束

我正在使用spawn来创build一个subprocess和pipe道数据:

 child process | parent process (main) --------------------------------------- stdout -----> process.stdout stderr -----> process.stderr stdin <----- process.stdin 

问题是,当将process.stdin传递给subprocessstdin ,当subprocess完成时,主进程不会结束。

代码看起来像这样(不是一个很好的例子,因为ps不使用stdin数据,我猜):

 var Spawn = require("child_process").spawn; var ps = Spawn("ps"); process.stdin.pipe(ps.stdin); ps.stdout.pipe(process.stdout); ps.stderr.pipe(process.stderr); 

如果我删除process.stdin.pipe(ps.stdin)行,主进程结束,但stdin数据不再被pipe道。

pssubprocess结束后为什么主进程没有结束? 我怎么解决这个问题?

一个丑陋的解决办法是:

 ps.on("close", process.exit.bind(process)); 

我不喜欢这个,因为我不想强制closures主进程,但是我想自然地closures(比如setTimeout(function(){}, 1000)等待1000ms,然后进程结束)。