Node.js集群获得主PID

时间:2013-09-06 03:39:35

标签: node.js

我使用以下群集代码为我的节点应用程序分叉多个进程。

if (cluster.isMaster) {
  require('os').cpus().forEach(function () {
    cluster.fork();
  });

  cluster.on('exit', function (worker, code, signal) {
    cluster.fork();
  });
} else if (cluster.isWorker) {
  logger.log.info('Worker server started on port %d (ID: %d, PID: %d)', app.get('port'), cluster.worker.id, cluster.worker.process.pid);
}

输出是:

Thu Sep 05 2013 20:30:03 GMT-0700 (PDT) - info: Worker server started on port 3000 (ID: 1, PID: 606)
Thu Sep 05 2013 20:30:03 GMT-0700 (PDT) - info: Worker server started on port 3000 (ID: 2, PID: 607)
Thu Sep 05 2013 20:30:03 GMT-0700 (PDT) - info: Worker server started on port 3000 (ID: 5, PID: 610)
Thu Sep 05 2013 20:30:03 GMT-0700 (PDT) - info: Worker server started on port 3000 (ID: 3, PID: 608)
Thu Sep 05 2013 20:30:03 GMT-0700 (PDT) - info: Worker server started on port 3000 (ID: 4, PID: 609)
Thu Sep 05 2013 20:30:03 GMT-0700 (PDT) - info: Worker server started on port 3000 (ID: 6, PID: 611)
Thu Sep 05 2013 20:30:03 GMT-0700 (PDT) - info: Worker server started on port 3000 (ID: 8, PID: 613)
Thu Sep 05 2013 20:30:03 GMT-0700 (PDT) - info: Worker server started on port 3000 (ID: 7, PID: 612)

有8个工作进程但是当我使用pgrep检查进程时,我看到了9

$ pgrep -l node
613 node
612 node
611 node
610 node
609 node
608 node
607 node
606 node
605 node

所以一个额外的进程必须是主进程,如何打印出主进程IP?

由于

我发布了另一个与此相关的问题,我认为对每个人来说也可能有用:

Node.js cluster master process reboot after got kill & pgrep?

2 个答案:

答案 0 :(得分:5)

您可以在process.pid内使用if(cluster.isMaster)获取主进程pid。 IP和端口是您的应用的属性,因此它们是相同的。

答案 1 :(得分:0)

您可以使用process.ppid获取主(父)pid。 这样一来,您就可以发送信号,这对于重新加载非常有用,而无需停机。

例如process.kill(process.ppid, 'SIGHUP');