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);'
这将等待三秒,就像你期望的一样。