我有一个无休止的NodeJS script.js循环,我需要这个脚本在后台执行另一个脚本作为一个WebSocket服务实际上是一个服务.
var exec = require('child_process').exec; exec('node bgService.js &');
所以现在这两个脚本都运行正常!
当我在我的script.js上执行Ctrl C时,bgService.js脚本也从我不想要的内存中删除.
如何在后台运行某些东西并忘记?
解决方法
您可以使用带分离选项的
child_process.spawn:
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',{ 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',{ stdio: [ 'ignore',out,err ],// piping stdout and stderr to out.log detached: true }).unref();
有关更多信息,请参阅child_process.spawn
documentation
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。