linux怎麼監控本機乙個程序的執行狀態,並通過web展現出來?

時間 2021-06-02 21:39:48

1樓:

本質上有兩種解決方案:

伺服器起指令碼,定時掃瞄發心跳,存到資料庫中,頁面去查頁面直接調shell命令,實時去查

前者的好處是可以統計歷史資料,同時對機器的壓力是穩定的。後者的好處是結構簡單,資料是實時的

2樓:Zign

你是要自己看還是給客戶看?

監視的要求有多高?(比如最大1分鐘的延遲能不能接受?)最簡單粗暴的辦法當然是bash寫個cgi,掛nginx上直接執行。或者寫一段php也行。

不過既然題主能來這裡問恐怕不太想寫這種。

那題主可以考慮一下cron,cron乙個ps指令,1分鐘一次,結果寫在乙個文字檔案裡,你用nginx直接看就是了。

3樓:sin1080

你給supervisorctl status或者哪怕supervisord自帶的web介面上面封裝一層前端,把輸出弄好看一點不就行了。用PHP去實時呼叫supervisorctl、 status的輸出都行。

4樓:王廣鐸

1、後台語言可以獲取當前所在伺服器的一些狀態,比如作業系統版本,記憶體等等。

2、通過ajax去後台請求,讀取這些資訊,資料+html變成頁面輸出。

3、考慮使用伺服器推送實現實時響應。

5樓:Hefe

1,寫乙個服務,用exec或popen執行ps的命令列,根據該程序的名字獲取該程序的pid。

sprintf(cmd, "ps -ef|grep %s ",name);

pstr=popen(cmd, "r");

然後php定時的請求這個機器上的程序狀態,如果程序掛掉了,可以做個預警。

//獲取程序占用記憶體

unsigned int get_proc_mem(unsigned int pid);

FILE *fd;

char line_buff[512]=;

sprintf(file_name,"/proc/%d/status",pid);

fd =fopen(file_name,"r");

if(nullptr == fd){

return 0;

char name[64];

int vmrss;

for (int i=0; ifgets(line_buff,sizeof(line_buff),fd);

fgets(line_buff,sizeof(line_buff),fd);

sscanf(line_buff,"%s %d",name,&vmrss);

fclose(fd);

return vmrss;

然後你就可以通過一些圖形做一些動態展示了。

6樓:

最暴力的辦法,難道不是用php執行程序監控命令然後把輸出重寫到網頁端麼……?

不過我隱隱記得這東西有比較良好的解決方案。如果想起來了過來修改答案。

為什麼乙個程序對共享記憶體的寫入另乙個程序可以立即可見?不考慮cpu的cacheline嗎?

張驍 這事的根本在MMU上,實體地址與邏輯位址的對映實現的。簡化思維,你我分別是兩個不同的程序,住在兩間不同的屋子裡,房間裡有一面分隔成很多小方塊的玻璃牆,這面玻璃牆就是專屬於我們各自的記憶體 邏輯記憶體 而實際上,這些個小方塊都是通過複雜而巧妙的機構對映到遠方的一大塊黑板上 物理記憶體 我們看到的...

Android可以徹底殺死乙個程序嗎?

kjkj 安卓軟體可以通過JNI來fork乙個自己的子程序,用來不斷監聽自己的主程序 即應用本身 一旦監聽到自己的主程序被殺死,子程序就可以幹很多事情了 什麼重新啟動自己的應用程式 啟動自己的服務.就算應用本身被解除安裝,該應用的子程序還會繼續存在,繼續執行。因此子程序很難殺死,其實連找到他都很難,...

C或者C 怎麼監控乙個,檔案改變了(比如txt)?

題主的問題 C或者C 怎麼監控乙個,檔案改變了 比如txt C或者C 怎麼監控乙個檔案改變了 比如txt 意思是 比如C語言執行到某一行,停止了,只有當txt檔案改變了 另外乙個程式向裡面新增了內容 它才讀取txt,然後執行下去。題外題 怎麼暫停程式,等待變化後,讀入資料呢?忘了說明了,Window...