johnpoint

johnpoint

(。・∀・)ノ゙嗨
github

Linux 進程資訊格式化

到了 2021 年,我回頭看了一下自己的伺服器面板,發現它還是那個半成品的樣子... 於是在這三天裡,我修改了一下程式碼,加入了 v2 API 介面,這個介面主要使用 Websocket 進行通訊,雖然說伺服器端的壓力其實不是很大,但是使用輪詢進行資料更新不僅會看到一堆一堆的請求,對於我的爛電腦來說也有些吃力,不過這篇文章的內容不是這個,改天再開一篇文章記錄一下。

進程查看其實是很早之前就想做進面板的功能之一,但是受限於並沒有找到現成的 go 第三方或者官方庫,所以就放了一放 (結果放了差不多一年) ,剛好這幾天在修改面板的程式碼,索性就順手把它做了。

進程查看沒有庫可以調用,就只能通過調用系統命令來進行查看,一般來說我會使用 ps -aux 來看進程,但是對於面板來說,這裡輸出的資料有點太多以及有點太亂(太亂指的是輸出的資料不是電腦友好型結構),然後看了一下網上網友們五花八門的命令,左拼右湊之後,最後成品是用的 ps axc -o pid,user,stat,pcpu,pmem,command --sort -pcpu --no-header | sed 's/\ \+/\ /g' 最終得到的資料是沒有表頭、連續空格被替換成一個空格的資料,我覺得這就夠了,其餘的交給前端處理。

前端程式碼截取如下

let ps = server.Ps.split('\n');
ps.forEach(item => {
    if (item.split(" ").length > 3) {
        item = item.split(" ");
        if (item[0] === "") {
            item = item.slice(1, item.length);
        }
        let i = {
            PID: item[0],
            User: item[1],
            State: item[2],
            Pcpu: item[3],
            Pmem: item[4],
            Command: item.slice(5, item.length).toString().replaceAll(",", " "),
        };
        this.psData.push(i);
    }
});

最後效果還不錯~

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。