【问题标题】:nodejs child_process child process run twicenodejs child_process 子进程运行两次
【发布时间】:2017-01-12 06:08:26
【问题描述】:

我想通过远程桌面连接上的完整计算机名称连接计算机。在nodejs中,我创建了一个子进程来执行cmd命令。它执行成功,但是两分钟后,它又执行了。我用的是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();

你能帮帮我吗?非常感谢!

【问题讨论】:

  • 我不明白“两分钟后,它再次执行”的评论。这意味着什么?此外,在您的 child_process 完成 .exec() 之前,您太早调用 .kill(),所以您没有给它运行的机会。
  • @jfriend00 但它实际上运行了两次,如果 child_process 创建一个进程,它运行成功。它会自动终止吗?
  • 它是否自动终止取决于您正在运行的命令是否自行终止。如果mstsc 正常运行然后终止,那么你应该让它这样做而不杀死进程。您在此处显示的代码不会运行任何两次,所以如果它运行两次,那是因为除了您在此处显示的代码之外还有其他代码。
  • @jfriend00 你是对的。我记录了我的代码执行,它实际上执行了两次,正如你所想的,它是导致问题的其他一些代码。你救了我的命。非常感谢!

标签: node.js child-process


【解决方案1】:

我遇到了同样的问题,我花了一段时间才明白,问题是 HTTP 服务器而不是“chileProccess”。 您问题中缺少的链接是您通过 HTTP 请求运行 executeScript 的事实(可能是 expressJs,因为您在 2 分钟后得到超时)。

问题因为不清楚。

实际发生的情况是 HTTP 请求达到了 HTTP 服务器设置的超时边界,在 expressJS 中是 2 分钟。

超时后,由于没有处理,请求没有关闭, 它被再次调用一次,以此类推,每 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 ****');
});

【讨论】:

    猜你喜欢
    • 2018-11-23
    • 1970-01-01
    • 2016-06-07
    • 2016-05-28
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    相关资源
    最近更新 更多