如何在 NodeJS 中运行永无止境的 bash 进程而不锁定服务器



服务器的目的是能够选择一个网络摄像头并流式传输它,以及我已经工作的其他一些东西。我正在尝试从节点.js服务器中运行一个连续进程(mjpg-streamer)。节点.js服务器正在处理一个 HTML 页面,该页面具有绑定到 javascript 函数的选择下拉列表,以通过 socket.io 向服务器发送命令。下拉列表允许我选择视频 0、视频 1 和无。但是,每当我尝试运行服务器时,它都会拒绝说出特定代码块无法访问或代码卡在运行无限进程后的所有内容。如何在不锁定服务器的情况下执行此操作?以下是导致问题的代码:

child = exec("video0.sh", function (error, stdout, stderr) {
sys.print('stdout: ' + stdout);
sys.print('stderr: ' + stderr);
if (error !== null) {
  console.log('exec error: ' + error);
}

video0.sh bash 脚本是:

cd mjpg-streamer/mjpg-streamer ;
export LD_LIBRARY_PATH=. ;
./mjpg_streamer -o "output_http.so -w ./www -p 8080" -i "input_uvc.so -d /dev/video0

来自child_process.exec文档(强调我的):

callback 进程终止时与输出一起调用的函数

如果希望该程序流式传输数据,则可能不会终止。 您需要使用 child_process.spawn ,它返回一个 ChildProcess 对象。 这使您可以访问stdout,并以流的形式stderr,这意味着您可以在数据出来时处理数据,而不是仅在完成后处理数据。