javascript - 在 aws node 10 lambda 中执行子进程后,节点生成子进程不执行命令
问题描述
我正在尝试运行 2 个子进程,但一个似乎被阻止并最终使节点 lambda 超时。
环境:
- 在 docker 容器中运行的 AWS 节点 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 命令会完美运行。
这让我相信这是我如何处理节点中的子进程的问题。
child_process.exec ffprobe 命令是否可能仍在运行/阻止新的 ffmpeg (child_process.spawn) 命令运行 - 如果是这样,我该如何检查?
当我访问 docker 容器中正在运行的进程时,只有新的 ffmpeg 命令似乎正在运行,尽管它不消耗内存并且只是挂起 - 似乎什么也没做。我什至尝试从 docker cli 启动 ffmpeg 命令(避免使用节点 env),这工作正常并按预期运行。
解决方案
所以看来我的问题并不是真的在 exec 和 spawn 之间,我不是 100% 确定,但我认为可能是子进程被保存在容器中并在下一次调用 lambda 时恢复。
更改为 child_process.spawnSync 等到子进程退出并保持清洁,自从使用它以来我还没有遇到过这个问题。
非常感谢其他人的更彻底的解释。
推荐阅读
- angular - 我错过了什么我的 RXJS 服务不返回数组?
- ios - 如何从 Health 应用程序访问和读取步行事件?
- codeigniter-3 - 文件上传时数组到字符串转换错误,显示错误但没有成功数据
- classnotfoundexception - ClassNotFound 与 Ozzie、Azure HDInsight 和 Spark2
- python - Pandas - groupby,其中每一行都有多个值存储在列表中
- asynchronous - 离子异步 ngFor 数据
- javascript - Electron webview 不会自动播放 youtube 视频
- wordpress - 正则表达式重定向 301 文件夹和 Wordpress 中该文件夹中的所有帖子
- asp.net - 需要使用 HttpClient() 从 c# 代码中传递 `Client-Id` 标头参数来调用 Rest API Post 方法
- javascript - 谁给出浏览器请求缓存图像的响应标头?