child_process.spawn()不是't正在等待子节点进程完成

child_process.spawn() isn't waiting for child node process to complete

本文关键字:在等待 子节点 进程 spawn process 不是 child      更新时间:2023-09-26

以下按预期工作,等待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);'

这将像你预期的那样等待三秒。