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

Viewed 529

I am attempting to run 2 child processes, but one seems to be blocked and eventually times out the node lambda.

Environment:

  • AWS node 10 lambda running in a docker container.
  • Accesses ffmpeg and ffprobe via a lambda layer in the /opt/bin directory.

child_process.exec I am running ffprobe in a child_process.exec to get the file format of an audio file. I am using exec because the output is a small json response (which shouldn't consume much memory).

child_process.spawn Shortly after I run ffmpeg to convert the audio file to mp3 using child_process.spawn.

The problem is the FFMPEG child_process.spawn command doesn't run after ffprobe (even though ffprobe successfully completes). If I don't run the ffprobe command the FFMPEG command runs perfectly.

Which leads me to believing this is an issue with how I am dealing with child processes in node.

Is it possible the child_process.exec ffprobe command is somehow still running/ blocking the new ffmpeg (child_process.spawn) command from running - if so how do I check this?

When I access the running processes in the docker container only the new ffmpeg command seems to be running, although it consumes no memory and just hangs - seemingly doing nothing. I even tried launching the ffmpeg command from the docker cli (avoiding using the node env) and this works fine and runs as expected.

1 Answers

So it seems my issue wasn't really between exec and spawn, I am not 100% sure but I think it could be that the child process was preserved in the container and resumed in the next invocation of the lambda.

Changing to child_process.spawnSync waits until the child process exits and keeps things cleaner and I haven't encountered this problem since using this.

A more thorough explanation from someone else would be really appreciated.

Related