微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

node.js – NodeJs在后台执行命令并忘记

我有一个无休止的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 举报,一经查实,本站将立刻删除。

相关推荐