最近開發乙個程序監控的服務,由於對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.中斷 休眠中,...