我有一个无限的NodeJSscript.js
循环,我需要这个脚本来在后台执行另一个脚本作为服务,而这实际上是一个WebSocket服务。
var exec = require('child_process').exec;
exec('node bgService.js &');
因此,现在两个脚本都可以正常运行!
当我在Ctrl+C
上执行时script.js
,该bgService.js
脚本也会从我不想删除的内存中删除。
如何在后台运行某些东西而忘记?
您可以使用child_process.spawn和以下detached
选项来实现:
var spawn = require('child_process').spawn;
spawn('node', ['bgService.js'], {
detached: true
});
它将使子流程成为新流程组的领导者,因此它将在父流程退出后继续运行。
但是默认情况下,父进程将等待分离的子进程退出,并且还会监听stdio
。要将子进程与父进程完全分离,您应该:
stdio
进程与父进程分离,将其通过管道传输到某个文件或/dev/null
unref()
方法从父事件循环引用计数中删除子进程这是一个这样做的例子:
var spawn = require('child_process').spawn;
spawn('node', ['bgService.js'], {
stdio: 'ignore', // piping all stdio to /dev/null
detached: true
}).unref();
如果您不想丢失孩子的stdin
输出,则可以通过管道将其输出到某些日志文件中:
var fs = require('fs'),
spawn = require('child_process').spawn,
out = fs.openSync('./out.log', 'a'),
err = fs.openSync('./out.log', 'a');
spawn('node', ['bgService.js'], {
stdio: [ 'ignore', out, err ], // piping stdout and stderr to out.log
detached: true
}).unref();
有关更多信息,请参见child_process.spawn
文档
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句