javascript - Node 生成子进程在 aws Node 10 lambda 中的 exec 子进程之后不执行命令

标签 javascript node.js docker ffmpeg child-process

我正在尝试运行 2 个子进程,但其中一个似乎被阻止并最终使 Node lambda 超时。

环境:

  • 在 Docker 容器中运行的 AWS Node 10 lambda。
  • 通过/opt/bin 目录中的 lambda 层访问 ffmpeg 和 ffprobe。

child_process.exec 我在 child_process.exec 中运行 ffprobe 以获取音频文件的文件格式。我使用 exec 是因为输出是一个小的 json 响应(不会消耗太多内存)。

child_process.spawn 在我运行 ffmpeg 使用 child_process.spawn 将音频文件转换为 mp3 后不久。

问题是 FFMPEG child_process.spawn 命令在 ffprobe 之后不运行(即使 ffprobe 成功完成)。如果我不运行 ffprobe 命令,FFMPEG 命令将完美运行。

这让我相信这是我处理 Node 中子进程的方式的问题。

child_process.exec ffprobe 命令是否有可能仍在运行/阻止新的 ffmpeg (child_process.spawn) 命令运行 - 如果是这样,我该如何检查?

当我访问 docker 容器中正在运行的进程时,只有新的 ffmpeg 命令似乎正在运行,尽管它不消耗内存并且只是挂起 - 似乎什么也没做。我什至尝试从 docker cli 启动 ffmpeg 命令(避免使用 Node 环境),这工作正常并按预期运行。

最佳答案

所以看来我的问题并不是真正在 exec 和 spawn 之间,我不是 100% 确定,但我认为可能是子进程被保留在容器中并在下次调用 lambda 时恢复。

更改为 child_process.spawnSync 会等到子进程退出并使事情保持干净,自从使用它以来我还没有遇到过这个问题。

如果有人提供更全面的解释,我们将不胜感激。

关于javascript - Node 生成子进程在 aws Node 10 lambda 中的 exec 子进程之后不执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62626686/

相关文章:

javascript - 为什么 navigator.appCodeName 返回 Mozilla?

javascript - Mixpanel track_links 不适用于动态添加的元素

javascript - 通过 HTML 表单将 javascript 数组传递到另一个 js 文件

javascript - 在 Node.JS 中运行 .EXE

node.js - Heroku + MongoLab 插件与 Node.js 应用程序的连接错误 - 错误 : connect ECONNREFUSED 127. 0.0.1:27017

docker - 将自签名 SSL 证书用于部署镜像

javascript - 如何处理 catch(err) block 上的 @typescript-eslint/no-unsafe-member-access 规则?

node.js - 私有(private) Node 模块拉入 docker

docker 登录私有(private) Nexus => 来自守护进程的错误响应 : login attempt to http://ip:port/v2/failed with status: 404 Not Found

javascript - 将 mongoDB 文档数据存储为变量