windows程序監控

2021-08-20 16:37:57 字數 1559 閱讀 8167

最近開發乙個程序監控的服務,由於對windows api不熟,所以折騰了小兩周才完全跑通,特記錄一下

1由於需求需要根據程序名來進行監控,所以首先要根據程序名來獲取程序控制代碼(同名程序可能有多個,比如,起了多個notepad.exe)

//通過程序名獲取程序控制代碼集

//返回值為 同名程序個數(不超過20個)

int getprocesshandle(lpcwstr lpname, handle ph[20])  

processentry32 pe = ;

bool fok;  

for (fok = process32first(hsnapshot, &pe); fok; fok = process32next(hsnapshot, &pe))  

// 同名程序超過20個,返回20個

if (num > 20)

} closehandle(hsnapshot);

return num;   }

2根據程序控制代碼來獲取程式開始執行的時間(多個同名程序裡最早的乙個)

earliesttime = coledatetime::getcurrenttime();

for (i = 0; i < number; i++)

}3建立子執行緒,來監聽該程式名的所有程序控制代碼的結束事件,將結束時間寫入redis

for (int j = 0; j < number; j++)

pdataarray[ncount]->procname = _strdup(name);

pdataarray[ncount]->num = number;

hthreadarray[ncount] = (handle)_beginthreadex(null, 0, &mythreadfunction, pdataarray[ncount], 0, null);

unsigned int _stdcall mythreadfunction(lpvoid lpparam)

else if (pdataarray->num == 1)

switch (nret)

if (rpushstring(c, buffer))

redisfree(c);

}break;

case wait_timeout:

// 超時,退出

;;break;

casewait_abandoned_0:

;;break;

case wait_failed:

// 函式呼叫失敗,比如傳遞了乙個無效的控制代碼

;;break;

}return 0;

}4將監控事件做成定時事件,30秒跑一次

timer_id = timesetevent(timeout+1000, 1, (lptimecallback)ontimefunc, dword(1), time_periodic);

5套上scmanager框架,將程式做成服務,把狀態傳入scmanager

windows下bat實現監控程序

echo off checkservice for f tokens 5 n in qprocess.exe find supernode.exe do if n supernode.exe goto checkmessage else goto restartservice restartserv...

Windows平台監控目標程序及需注意的問題

最近專案中需要監控目標程序並抓取其資訊,定位對方程序一般有兩種方式 1 hook系統函式createprocess 2 抓取程序快照,採用輪詢的方式獲取目標程序 此處採用第二種方式,如下 有簡單注釋 tmyprocess class private fhandle cardinal fprocess...

linux 程序監控

1 ps命令 直接在linux系統中輸入 ps 結果如下 預設情況下,ps命令指揮顯示執行在當前控制台下的屬於當前使用者的程序。pid 程式的程序號 tty 程式執行的終端 time 程式執行的時間 引數 在linux系統中,程序的狀態有五種 1.執行 正在執行或在執行佇列中等待 2.中斷 休眠中,...