javascript - 如何重新启动 Node.js 子进程

标签 javascript node.js process restart

我正在尝试以 serverSpawnProcess 的名称重新启动某个 child_process。我可以让它停止,但我无法再次启动它。

serverSpawnProcess.stdin.write('stop\n');
serverSpawnProcess = null;
setTimeout(function() {
  serverSpawnProcess = spawn('java', [
    '-Xmx512M',
    '-Xms512M',
    '-jar',
    'server_files/minecraft_server.jar',
    'nogui'
  ]);
  response.send('r');
}, 10000);

是我认为我会去做的,但它只会停止服务器,它不会再次产生它。 Node.js 5.3.0 如果有帮助的话。

编辑 为了其他人寻找如何做到这一点,我最终将 spawn 放入一个函数中,我这样调用它

serverSpawnProcess.on("close", function() {
    response.send('r2');
    // Wait for process to exit, then run again

    startServer();
 });

最佳答案

我完成这个的方法如下。假设我有一个 camCmd,它允许我将 DSLR 相机作为我的网络摄像头运行,但它会定期崩溃。目标是在不中断流的情况下自动重新启动它。下面的代码正是这样做的。

const { spawn } = require('child_process')

const camCmd = `gphoto2 --stdout --capture-movie | \
  ffmpeg -i - -vcodec rawvideo -pix_fmt yuv420p \
  -loglevel error -f v4l2 /dev/video1`

const respawn = spawned => {
  spawned.on('close', () => {
    respawn(spawn(camCmd, { shell: true }))
  })
}
respawn(spawn(camCmd, { shell: true }))

非常简单,它是一个递归函数,它的参数是你正在生成的任何东西。其中,一旦关闭,就会使用新生成的 arg 调用自身。

关于javascript - 如何重新启动 Node.js 子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34400581/

相关文章:

python - 创建pypy进程

python - 后验高斯过程(Python)

javascript - 动态更改 javascript 函数?

javascript - 如何使用 JavaScript 打开 Windows 程序?

javascript - Angular $http.post 和 No 'Access-Control-Allow-Origin' header

javascript - Electron :如何强制重新加载?

process - Erlang ETS 表与消息传递 : Optimization concerns?

javascript - 在javascript中获取引号内的字符串

javascript - 使用 javascript 检查 XML 节点是否存在

node.js - 如何在更新期间检查该数据是否已存在于数据库中(Mongoose And Express)