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

时间:2015-11-08 03:17:20

标签: javascript node.js

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

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

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

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

为什么有任何想法?感谢。

编辑: spawnSync()在两种情况下都表现相同。另外,我不希望阻止spawn()函数,我希望节点进程在退出之前等待其子进程退出。

1 个答案:

答案 0 :(得分:1)

问题是双引号。这使得程序执行只是一个字符串而不是setTimeout()函数调用。请改用:

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

请注意删除setTimeout()附近的双引号。

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

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

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

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

那会像你期待的那样等待三秒钟。