簡體   English   中英

Node.js PM2:以編程方式檢索所有進程 ID

[英]Node.js PM2: programmatically retrieving all process IDs

我正在嘗試以編程方式獲取集群模式下所有 PM2 進程 ID 的數組。

const pm2 = require("pm2");

let allPids;

async function getPids() {
    return await new Promise(resolve => {
        pm2.list((err, list) => {
            if (err) {
                console.error(err);
            } else {
                resolve(list.map(process => process.pid));
            }
        });
    });
}

getPids().then(pids => {
    console.log(pids); // outputs an array of PIDs
    allPids = pids;
});

console.log(allPids); // outputs undefined

上面的代碼使用pm2.list()成功獲取了所有 PID,但我無法在 .then .then()回調之外訪問它們。

const pm2 = require("pm2")

let pids;

pm2.list((err, list) => {
    if (err) {
        console.log(err);
    } else {
        pids = list.map(process => process.pid);
    };
});

console.log(pids); // outputs undefined

setTimeout(() => {
    console.log(pids); // outputs array of PIDs
}, 1000);

此代碼也有效,但僅在setTimeout()回調中有效。

PM2文檔沒有任何幫助。

有沒有一種方法可以訪問 PID 而無需將我的所有代碼都放在.then() / setTimeout()回調中? 或者,是否有更好的解決方案?

你的 function 是異步的,那為什么不await呢?

const pm2 = require("pm2");

let allPids;

async function getPids(): number[] {
 
    let pids = [];

    try {
      pids = await pm2.list();
    } catch (err) {
      console.error(err);
    }

    return list.map(process => process.pid);
}

(async () => {
   allPids = await getPids();
   console.log(allPids);
})();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM