簡體   English   中英

Nodejs - 獲取正在運行的進程的環境變量

[英]Nodejs - Get environment variables of running process

我正在為 vscode 寫一個擴展,我需要獲取一個已經在運行的進程的環境變量。 但我無法找到一種方法來做到這一點。

我知道如何使用 psutil 在 python 中做到這一點:

for proc in psutil.process_iter(attrs=['name', 'exe']):
    if proc.info['name'].lower() == 'SomeProcess.exe'.lower():
        return proc.environ()

javascript/nodejs 有類似的東西嗎?

您可以使用 child_process 模塊生成終端並在平台上執行以下命令並獲取變量,解析並使用或編寫本機節點模塊以訪問每個平台的適當 API 並獲取 output。

Windows(使用powershell,2019為PID)

(Get-Process -id 2019).StartInfo.EnvironmentVariables

Linux

tr '\0' '\n' < /proc/2019/environ

蘋果電腦

ps eww -o command 2019  | tr ' ' '\n'

Thanks to https://serverfault.com/a/66366 & https://stackoverflow.com/a/28193753/12167785 & https://apple.stackexchange.com/a/254253 & https://stackoverflow.com/ a/11547409/12167785 & https://stackoverflow.com/a/18765553/12167785

結合@SudhakarRS 的回答:

var child = require('child_process').execFile('powershell', [ 
    '(Get-Process SomeProcess).StartInfo.EnvironmentVariables' 
], function(err, stdout, stderr) { 
    console.log(stdout);
}); 

如果要調試它,請確保查看errstderr

notepad替換SomeProcess對我有用,但使用notepad.exe不行。

在 powershell 上,您可以使用Get-Process [process name]具有特定名稱的進程。

因此,例如,如果我運行 4 個記事本實例並執行Get-Process notepad ,我會看到:

流程

您可以使用(Get-Process notepad).Id進程 ID,它返回:

圖片

您可以使用相同的代碼來選擇 ID:

var child = require('child_process').execFile(
    'powershell',
    ['(Get-Process notepad).Id'],
    function(err, stdout, stderr) { 
        var ids = stdout.split("\r\n");
        ids.pop(); //remove the blank string at the end
        console.log(ids);
    }
);

^ 返回:

返回

如果您只想獲取具有名稱的第一個進程,它是:

(Get-Process notepad)[0].StartInfo.EnvironmentVariables

^ 顯然用您的進程名稱替換notepad

簡單的方式(從這里,你可以使用shelljs 之類的東西然后運行:

ps faux | grep 'PROCESS_NAME'

然后提取進程ID(我只是在處理正則表達式),然后執行:

cat /proc/THE_PROCESS/environ | tr '\0' '\n'

您將把 env vars 作為字符串返回,例如:

THEVAR=1
ANOTHERVAR=2

我想你只是用 '\n' 分割字符串,但我正在檢查!

一旦我確定了正則表達式,我會更新它。 **您使用的是 linux/mac 還是 windows?

更新:跨平台檢查https://github.com/shelljs/shx

是的:

process.env會給你你所需要的:)

你可以在這里閱讀更多內容。

編輯:它只會為您所在的進程提供環境變量......我是否誤解了,您想要另一個進程的變量?

在 javascript/nodejs 中沒有內置的方法可以做到這一點。 如果你真的需要這樣做,那么最好的方法是在終端中運行一個命令,然后解析 output 來構造你需要的 object。

暫無
暫無

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

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