我正在尝试以 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/