到了 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);
}
});
最後效果還不錯~