如何检测节点生成的进程是不是仍在运行?

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); ); 如果topiclistenernull 进程不存在。

以上是关于如何检测节点生成的进程是不是仍在运行?的主要内容,如果未能解决你的问题,请参考以下文章

如果父进程仍在运行,子进程的 PID 是不是可供重用?

有没有办法检查子进程是不是仍在运行?

Process.Responding检测进程退出,同时进程运行

vb 检测某个进程是不是运行

Podman pod 几天后消失,但进程仍在运行并在给定端口上侦听

如何检测一个进程是不是已经执行完毕