javascript - child_process.spawn() 不等待子 Node 进程完成

标签 javascript node.js

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

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

但是它会立即退出,而不是像它应该的那样等待 3 秒(以及直接运行此命令时的情况:

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

有什么想法可以解释为什么吗?谢谢。

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

最佳答案

问题出在双引号上。这使得您的程序执行只是一个字符串,而不是 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/

相关文章:

javascript - 当滚动触发时,JQuery 多次重复百分号

node.js - 创建新的 React Native 应用程序

javascript - 如何在生产环境中运行 Node.js REST API 应用程序

node.js - 文档数据库 : Coldfusion Returning 401 Authorization error

mysql - 带有错误 : connect ECONNREFUSED 的 docker mysql

javascript - Uncaught ReferenceError : function is not defined but it is defined

javascript - 什么会导致 webpack 递归地包含每个文件?

javascript - JSF/Spring 从一页进行多个 session - 多选项卡界面

javascript - 我可以使用 window.postMessage 方法从 iframe 中的网页与包含该 iframe 的 UIWebView 进行通信吗?

c - 是否有一个模块可以将 node.js 绑定(bind)到 c 编译器?