2

次のクラスター コードを使用して、ノード アプリの複数のプロセスをフォークしました。

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

したがって、1 つのプロセス エクストラはマスター プロセスでなければならず、マスター プロセスの IP を出力するにはどうすればよいですか?

ありがとう

これに関連する別の質問を投稿しました。誰もがこれを見ると役立つと思います。

killとpgrepを取得した後、Node.jsクラスターマスタープロセスが再起動しますか?

4

2 に答える 2

5

process.pidinsideでマスター プロセス pid を取得できますif(cluster.isMaster)。IP とポートはアプリのプロパティであるため、同じになります。

于 2013-09-06T04:15:41.683 に答える
1

You can get the master (parent) pid with process.ppid. This will let you send a signal which is useful for reloads without downtime.

For instance process.kill(process.ppid, 'SIGHUP');

于 2019-07-15T14:20:26.680 に答える