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

Javascript 节点生成子进程不';t在aws节点10 lambda中执行子进程后执行命令,javascript,node.js,docker,ffmpeg,child-process,Javascript,Node.js,Docker,Ffmpeg,Child Process,我试图运行两个子进程,但其中一个子进程似乎被阻止,并最终使节点lambda超时 环境: AWS节点10 lambda在docker容器中运行 通过/opt/bin目录中的lambda层访问ffmpeg和ffprobe 子进程执行 我正在child_process.exec中运行ffprobe以获取音频文件的文件格式。我使用exec是因为输出是一个小的json响应(不应该占用太多内存) 子进程。生成 运行ffmpeg后不久,我使用child_process.spawn将音频文件转换为mp3 问

我试图运行两个子进程,但其中一个子进程似乎被阻止,并最终使节点lambda超时

环境:

  • AWS节点10 lambda在docker容器中运行
  • 通过/opt/bin目录中的lambda层访问ffmpeg和ffprobe
子进程执行 我正在child_process.exec中运行ffprobe以获取音频文件的文件格式。我使用exec是因为输出是一个小的json响应(不应该占用太多内存)

子进程。生成 运行ffmpeg后不久,我使用child_process.spawn将音频文件转换为mp3

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

这使我相信这是一个关于如何处理节点中的子进程的问题

是否可能child\u process.exec ffprobe命令仍在运行/阻止新的ffmpeg(child\u process.spawn)命令运行-如果是,我如何检查此情况?


当我访问docker容器中正在运行的进程时,只有新的ffmpeg命令似乎正在运行,尽管它不消耗内存,只是挂起——似乎什么也不做。我甚至尝试从docker cli启动ffmpeg命令(避免使用节点env),这工作正常,运行正常。

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

更改为child_process.spawnSync将等待子进程退出并保持更干净,自使用此选项以来,我从未遇到过此问题

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