【问题标题】:How to detect if a Node spawned process is still running?如何检测节点生成的进程是否仍在运行?
【发布时间】:2016-01-27 07:40:12
【问题描述】:

我可以生成如下进程:

var spawn = require('child_process').spawn;

var topicListener = spawn('python', ['topic_listener.py','Node.js'], {env: {
    TWITTER_CONSUMER_SECRET: process.env.TWITTER_CONSUMER_SECRET,
    TWITTER_CONSUMER_KEY: process.env.TWITTER_CONSUMER_KEY,
    TWITTER_TOKEN_SECRET: process.env.TWITTER_TOKEN_SECRET,
    TWITTER_ACCESS_TOKEN: process.env.TWITTER_ACCESS_TOKEN
}});

topicListener.stdout.on('data', function (data) {
    console.log(data.toString());
});

topicListener.stderr.on('data', function (data) {
    console.log(data.toString());
});

topicListener.on('close', function (code) {
    console.log("EXITED " + code);
});

所以我当然可以用.on(close, ...) 异步控制这一切,但是还有其他方法可以控制进程是否还活着?

【问题讨论】:

    标签: node.js spawn


    【解决方案1】:
    topicListener.on('exit', function (code) { 
     topicListener = null;
     console.log("EXITED " + code);
    });
    

    如果 topiclistener 为 null,则进程结束

    【讨论】:

      【解决方案2】:

      spawn('python', ['topic_listener.py','Node.js'].. 返回子进程对象。使用topicListener.pid 查找与进程关联的唯一 ID(如果它是活动的)。

      【讨论】:

      • 我已经测试过了,但即使进程结束 pid 仍然是一个定义的数字
      • topicListener.on('close', function (code) { topicListener = null; console.log("closed" + code); }); topicListener.on('exit', function (code) { topicListener = null; console.log("EXITED " + code); });
        如果topiclistenernull 进程不存在。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      • 1970-01-01
      • 2020-12-10
      相关资源
      最近更新 更多