獲取系統執行程序資訊 PSAPI介紹使用

2021-07-23 21:37:28 字數 2838 閱讀 3720

網上資料顯示,有這麼三種方法可以用來獲取系統執行程序資訊:

方法平台

備註psapi

windows nt,windows2000,windows xp

獲取程序,驅動器,模組,記憶體和工作集資訊

效能計數器

windows nt,windows2000,windows xp

提供除程序清單以外的關於程序的更多資訊,可在遠端機器上使用。

toolhelp32

windows 9x,windows2000,windows xp

獲取程序,執行緒,模組和堆資訊

此前使用的snapshot就是屬於toolhelp32的(

psapi全稱為程序狀態api,msdn有介紹

該方法,使用過後,感覺與toolhelp32的大致相同,也比較簡潔方便。但是在獲取驅動、記憶體等方面,由於psapi有很多方法支援,相比而言,會更加簡單實用。

主要通過enumprocess函式來獲取所有執行程序的id,然後再分別通過enumprocessmodules、enumdevicedrives等函式,獲得相應的計數器或者指標資訊。

下面就簡單貼出msdn的幾段例項(原程式在win7下無法編譯通過,需要新增psapi.lib庫,既是#pragma comment(lib, "psapi.lib"))。

(四段**……有點懶了,呵呵)

[cpp] view plain copy

/* #include

#include

#include

#include

#pragma comment(lib, "psapi.lib") 

// to ensure correct resolution of symbols, add psapi.lib to targetlibs 

// and compile with -dpsapi_version=1 

void printprocessnameandid( dword processid )  } 

// print the process name and identifier. 

_tprintf( text("%s  (pid: %u)\n"), szprocessname, processid ); 

// release the handle to the process. 

closehandle( hprocess ); 

} int main( void ) 

// calculate how many process identifiers were returned. 

cprocesses = cbneeded / sizeof(dword); 

// print the name and process identifier for each process. 

for ( i = 0; i < cprocesses; i++ )  } 

return 0; 

} */  

/* #include

#include

#include

#include

#pragma comment(lib, "psapi.lib") 

// to ensure correct resolution of symbols, add psapi.lib to targetlibs 

// and compile with -dpsapi_version=1 

#define array_size 1024 

int main( void )  } 

} else  

return 0; 

} */  

/* #include

#include

#include

#pragma comment (lib, "psapi.lib") 

// to ensure correct resolution of symbols, add psapi.lib to targetlibs 

// and compile with -dpsapi_version=1 

void printmemoryinfo( dword processid ) 

closehandle( hprocess ); 

} int main( void ) 

// calculate how many process identifiers were returned. 

cprocesses = cbneeded / sizeof(dword); 

// print the memory usage for each process 

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

return 0; 

} */  

#include

#include

#include

#include

#pragma comment (lib, "psapi.lib")  

// to ensure correct resolution of symbols, add psapi.lib to targetlibs  

// and compile with -dpsapi_version=1  

int printmodules( dword processid )  

}  }  // release the handle to the process.  

closehandle( hprocess );  

return 0;  

}  int main( void )  

return 0;  

ubuntu後台執行程序

最近在azure上搭乙個基於web.py的web service,由於是用putty去ssh伺服器,在server上把web.py啟動以後,回到寢室由於pc睡眠,putty連線inactive,導致web service無法正常訪問。正常啟動web service python test.py 88...

使用procd執行程序

在openwrt系統內init程序被procd取代,procd作為父程序可以監控子程序的狀態。一旦子程序退出後即可在某乙個時刻嘗試進行重啟程序。在op系統內使用procd監控的有uhttpd,netifd等。在 etc init.d 資料夾內帶有use procd 1標誌,下面就介紹如何讓procd...

獲取系統的程序資訊

要想獲取系統的程序資訊,有個很好的方法,就是用toolhelp,其提供的介面可以方便的滿足你的要求,如下 include 首先匯入標頭檔案 pe就是我們獲取的程序結構體 dosomething fok process32next m hsnapshot,pe 還有嗎?其中結構體processentr...