节点生成子进程在 aws 节点 10 lambda 中执行子进程后不执行命令

Node spawn child process doesn't execute the command after exec child process in aws node 10 lambda

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

环境:

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

child_process.spawn 在我 运行 ffmpeg 使用 child_process.spawn.

将音频文件转换为 mp3 后不久

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

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

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

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

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

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

如果有人能提供更详尽的解释,我们将不胜感激。