child_process.spawn()不等待子节点进程完成

以下按预期工作,等待3秒后退出:

child_process.spawn( 'sleep', [3] ); 

但是这是立即退出,而不是等待3秒,因为它应该(直接运行此命令时:

 child_process.spawn( 'node', ['-e', '"setTimeout(null, 3000);"'] ); 

任何想法,为什么? 谢谢。

编辑: spawnSync()在两种情况下的行为相同。 另外,我并不期待spawn()函数阻塞,我期待节点进程在退出之前等待其subprocess退出。

问题是双引号。 这使得你的程序只是一个string而不是一个setTimeout()函数调用。 用这个代替:

 child_process.spawn( 'node', ['-e', 'setTimeout(null, 3000);'] ); 

请注意删除setTimeout()周围的双引号。

使用双引号,它与从命令行(假设一个类Unix操作系统/ shell)运行这个效果是一样的:

 'node' '-e' '"setTimeout(null, 3000);"' 

尝试一下,你会看到它立即返回,因为最后一个参数只是一个string值,不需要被parsing和执行。 然后试试这个:

 'node' '-e' 'setTimeout(null, 3000);' 

这将等待三秒,就像你期望的一样。