下列内容按预期工作,等待3秒钟后退出:

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


但这会立即退出,而不是等待3秒钟(和直接运行此命令时一样):

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


有什么想法吗?谢谢。

编辑:spawnSync()在两种情况下的行为相同。另外,我不希望spawn()函数阻塞,我希望节点进程在退出自身之前先等待其子级退出。

最佳答案

问题是双引号。这使您的程序执行只是一个字符串,而不是setTimeout()函数调用。使用此代替:

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


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

用双引号引起来,它实际上与从命令行运行它相同(假设是类似Unix的操作系统/ shell):

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


尝试一下,您会看到它立即返回,因为最后一个参数只是一个字符串值,不需要解析和执行。然后试试这个:

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


这将等待您期望的三秒钟。

关于javascript - child_process.spawn()不等待子 Node 进程完成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33590343/

10-11 09:33
查看更多