使用C 製做程序監視器

2021-06-16 02:17:21 字數 2587 閱讀 9766

1)可以檢視程序的各項基本資訊,如cpu,記憶體,父程序,執行路徑,建立者等

2)可以中止程序,建立新程序

3)可以配置目標程序,配置重新整理速度

(以下給出部分**,其餘像程序的建立、中止等,使用process類將很容易實現)

1)使用wmi獲取父程序id,程序建立者

(注意,使用wmi獲得的內容,不宜迴圈重新整理,這樣代價比較大)

新增命名空間:

using system.management;

/**

/// 使用wmi獲取指定程序的建立者等資訊

///

/// 程序id

private void filldetailusewmi(int pid)

string user = "";

//判斷獲取使用者名稱的操作是否成功

if (hor.obj["returnvalue"].tostring() == "0")

//判斷字典中是否已移除該項

if (!this.mdict.containskey(pid))

if (mo["parentprocessid"] != null && this.mdict.containskey(convert.toint32(mo["parentprocessid"])))

this.mdict[pid].creator = user;

//觸發重新整理程序詳細資訊事件

if (this.handledetaillist != null)

}//釋放資源

searcher.dispose();

searcher = null;

moc.dispose();

moc = null;

observer = null;

hor = null;

}/**

/// 該類用於監測wmi非同步呼叫方法是否已經返回

///

public class handleobjectready

public bool complete

}public managementbaseobject obj}}

2)使用效能計數器計算cpu利用率

2.1)計算過程

//通過計數器獲取idle空閒程序cpu佔用率r1;

//通過process類的totalprocessortime屬性獲取各程序的cpu時間,求和,得各程序(除空閒程序idle,該程序無法通過process類獲得cpu時間)cpu時間和t1;

//通過t1/(100-r1)得到總cpu時間t;

//對各程序,通過totalprocessortime獲得程序cpu時間tnew,計算:

(tnew-told)/t,即得該程序的cpu佔用率,其中told是程式中記錄的該程序上一次的totalprocessortime。

2.2)關於效能計數器

系統會為每個程序分配乙個計數器,通過

new performancecounter("process", "% processor time", "程序名稱")例項化該計數器,使用計數器物件的nextvalue方法可以得到程序占用cpu的百分比(第一次呼叫nextvalue獲取的值都為0,之後就沒問題了,這個要注意)。

2.3)idle程序的含義

idle意為懶散的、無所事事。事實上,idle不能算著乙個程序,它用於表示cpu空閒資源,它所佔的比率越高,表示你的機器越空閒。

2.4)多核cpu或使用超執行緒技術的cpu

對於多核或使用超執行緒技術的cpu,根據計數器求得的idle程序cpu占用比率將超過100%,此時應將idle的cpu利用率/總的cpu利用率,所得作為真正的idle的cpu利用率。

新增命名空間:

using system.diagnostics;

/**

/// 效能計數器,用於獲取cpu空閒百分比

///

private static performancecounter midle = new performancecounter("process", "% processor time", "idle");

/**

/// 效能計數器,用於獲取cpu總利用率

///

private static performancecounter mtotal = new performancecounter("process", "% processor time", "_total");

private void fillneedrefreshinfo(params process pcurrentall)

else

catch

}//呼叫重新整理事件

if (this.handleprocerefresh != null)}}

private double calcurrenttotalcputime()

else

//以下獲取上一次計算至當前總的非空閒cpu時間

foreach (process p in this.mcurrentall)

if (this.mdict ==null || !this.mdict.containskey(p.id))

else

}

C 寫「監視器」

using system using system.io class watcher create a new filesystemwatcher and set its properties.filesystemwatcher watcher new filesystemwatcher watch...

mysql 鎖監視器 MySQL鎖監視器

還在為看不懂何登成的加鎖處理分析文章感到羞愧嗎?還在因為何大師的筆誤,陷入深深的迷茫嗎?只要你擁有大於5.6.16版本的mysql,鎖監視器你值得擁有 快速入門 開啟set global innodb status output on set global innodb status output ...

mysql 鎖監視器 MySQL鎖監視器

標籤 還在為看不懂何登成的加鎖處理分析文章感到羞愧嗎?還在因為何大師的筆誤,陷入深深的迷茫嗎?只要你擁有大於5.6.16版本的mysql,鎖監視器你值得擁有 快速入門 開啟set global innodb status output on set global innodb status outp...