如何检测节点生成的进程是不是仍在运行?
Posted
技术标签:
【中文标题】如何检测节点生成的进程是不是仍在运行?【英文标题】: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, ...)
异步控制这一切,但是还有其他方法可以控制进程是否还活着?
【问题讨论】:
【参考方案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); );
如果topiclistener
是null
进程不存在。以上是关于如何检测节点生成的进程是不是仍在运行?的主要内容,如果未能解决你的问题,请参考以下文章
Process.Responding检测进程退出,同时进程运行