Node.js子进程运行两次

7

我想通过远程桌面连接使用完整的计算机名称连接计算机。在Node.js中,我创建了一个子进程来执行命令行命令。它成功执行了,但是两分钟后又执行了一次。我使用child_process模块的kill方法,但无效。

    var child_process = require('child_process');
    child_process.exec('mstsc /v ' + fullName, function(err, stdout, stderr) {
        if(err){
            console.log(err);
        }           
    });
    child_process.kill();

你能帮我吗?非常感谢!


1
我不理解关于“两分钟后,它再次执行”的评论是什么意思?此外,在您的child_process完成.exec()之前,您过早地调用了.kill(),因此您没有给它运行的机会。 - jfriend00
@jfriend00 但实际上它运行了两次,如果 child_process 创建一个进程,它将成功运行。它会自动终止吗? - Edward
它是否自动终止取决于您运行的命令是否会自动终止。如果mstsc正常运行然后终止,那么您应该让它自己完成而不是结束进程。您在此处显示的代码不会运行两次,因此如果它运行两次,则是由于除您显示的代码之外的其他代码导致的。 - jfriend00
@jfriend00 你说得对。我记录了我的代码执行,它实际上执行了两次,正如你所想,是一些其他的代码引起了问题。你救了我的命。非常感谢! - Edward
1个回答

2
我曾经遇到过同样的问题,花了一些时间才明白,问题出在HTTP服务器上而不是'chileProccess'。你提出的问题中缺少一个关键点,那就是你是通过HTTP请求来运行executeScript的(很可能是expressJS,因为你在2分钟后收到了超时错误)。
问题在于:由于HTTP服务器设置的超时边界(expressJS默认为2分钟),导致HTTP请求超时。
超时后,由于没有处理,并且请求未关闭,会再次调用请求,每隔2分钟如此。
解决方法: server.setTimeout()是设置所有连接的HTTP连接超时的方法。
默认情况下超时时间为2分钟。
示例:
var express = require('express');
var http = require('http');

var app = module.exports.app = express();
var server = http.createServer(app);
server.setTimeout(10*60*1000); // 10 * 60 seconds * 1000 msecs
server.listen(appConfig.port, function () {
    var logger = app.get('logger');
    logger.info('**** STARTING SERVER ****');
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接