在腳本學(xué)校(Scripting School)專欄的前面內(nèi)容里,我們討論了如何收集用戶輸入,為其分配變量,并將變量記錄到幫助文檔里。這次我們將要解釋如何檢索電腦中進(jìn)程的基本信息,如何使用Windows PowerShell結(jié)束你不想要的進(jìn)程。
檢索進(jìn)程信息
Windows PowerShell中的get-process cmdlet可以幫助你檢索電腦中的進(jìn)程信息。不帶任何參數(shù)地運(yùn)行這個(gè)命令,你可以獲得如下所示的輸出:
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) ID ProcessName
------- ------ ----- ----- ----- ------ -- -----------
21018 4 2084 5036 35 1.84 496 1XConfig
103 5 1156 3560 32 0.08 2308 alg
69 2 604 2336 19 2.52 1176 ati2evxx
66 2 572 2216 19 1.58 1772 ati2evxx
668 8 3384 7592 63 25.98 1512 csrss
108 5 940 3756 35 0.95 2220 ctfmon
如果你不確定NPM、WS、VM這些縮寫分別代表什么,可以借助下面的表格。
資源名稱 縮寫 描述
Handles 無 進(jìn)程的智能指針編號(hào),對(duì)內(nèi)存的存儲(chǔ)區(qū)域開放。當(dāng)句柄(handles)關(guān)閉時(shí),內(nèi)存被釋放。
Non-paged pool (in kilobytes) NPM(non-paged memory) 非分頁池是從不分頁到硬盤的存儲(chǔ)器,因此訪問速度更快。
Paged pool (in kilobytes) PM(paged memory) 如果有空間需求,分頁池有可能發(fā)送給磁盤。這使得分頁池比非分頁池更大(因?yàn)榇鎯?chǔ)器空間僅受磁盤上的頁面文件限制)一些內(nèi)存讀取操作可能耗時(shí)更長,因?yàn)樾枰牡臄?shù)據(jù)存儲(chǔ)在硬盤上。
Working set (in kilobytes) WS 工作集是指一個(gè)進(jìn)程占用物理內(nèi)存的頁面集。只有存儲(chǔ)在物理內(nèi)存(當(dāng)前沒有分頁到磁盤)的數(shù)據(jù)才在工作集中。
Virtual memory (in megabytes) VM 只用于進(jìn)程的虛擬內(nèi)存數(shù)量。
CPU time (in seconds) CPU (s) 進(jìn)程占用的處理器時(shí)間(包括所有可用的處理器)。
Process ID 無 給定進(jìn)程的標(biāo)識(shí)符。即使在一臺(tái)共享式電腦上,每個(gè)進(jìn)程都只有一個(gè)的進(jìn)程ID。
Process name 無 進(jìn)程的易記標(biāo)識(shí),但不同于進(jìn)程ID,它不一定是的。
注意:你還會(huì)接觸到很多其它進(jìn)程屬性。要想查看它們的屬性名稱,鍵入get-process | get-member即可?;玖斜韺?duì)我們今天的目的來說已經(jīng)足夠了,但是如果你要操作這些進(jìn)程屬性,就需要查看完整的列表。
如何檢索負(fù)載的進(jìn)程
你不一定需要所有進(jìn)程的列表,但你有必要大致了解哪些進(jìn)程占用了大部分的資源。舉例來說,一個(gè)進(jìn)程的工作集(如上面的表格所描述)可以很好地指示其系統(tǒng)內(nèi)存壓力的情況。為了找出工作集大于10MB的所有進(jìn)程,輸入下面的命令:
get-process | where-object {$_.WorkingSet -gt 10000000}
記住,美元符號(hào)代表變量。現(xiàn)在我們來看這些進(jìn)程的名稱、工作集屬性及其工作集是否是大于(上面命令中的gt) 給定值的。
這個(gè)命令會(huì)找到每個(gè)進(jìn)程,并把結(jié)果發(fā)送給where-object cmdlet做評(píng)價(jià)。然后你就會(huì)收到跟完全列表格式一模一樣的一個(gè)列表,但這個(gè)列表要短得多。
結(jié)束不必要的進(jìn)程
如果你管理自己的電腦,很容易獲取一些無用進(jìn)程。比如,有一天你在機(jī)場(chǎng)想聯(lián)機(jī),最后可能在電腦里留下Boingo客戶端進(jìn)程。你下載過某一個(gè)系統(tǒng)審核軟件的試用版本嗎?即使你有幾個(gè)月都沒有使用過它,進(jìn)程列表仍可能包含系統(tǒng)審核代理。
當(dāng)然,任務(wù)管理器也可以為你顯示進(jìn)程。但get-process更容易查看數(shù)據(jù),比如你可以不使用滾動(dòng)條查看一個(gè)完整列表。你需要應(yīng)付這些垃圾進(jìn)程,但同時(shí)你也可以結(jié)束它們。(在終止一個(gè)進(jìn)程前你應(yīng)該確定知道自己在干什么,如果你并不確定哪個(gè)進(jìn)程是干什么用的,不要貿(mào)然結(jié)束它)
要結(jié)束一個(gè)進(jìn)程,先從整個(gè)列表或最消耗資源的前十個(gè)進(jìn)程中檢索出它們的識(shí)別信息。然后,運(yùn)行stop-process命令。如果不帶任何參數(shù)運(yùn)行該命令,它會(huì)提示你輸入進(jìn)程ID號(hào)(僅僅輸入進(jìn)程名稱是無法結(jié)束進(jìn)程的)。你可以根據(jù)自己意愿結(jié)束多個(gè)進(jìn)程。完成后,按Enter鍵就會(huì)退出cmdlet。
你也可以使用–name parameter,stop-process –name processname等命令通過名稱來停止進(jìn)程。然而,我并不推薦這樣做。你應(yīng)該養(yǎng)成用進(jìn)程ID結(jié)束進(jìn)程的習(xí)慣。盡管記住進(jìn)程ID比記住進(jìn)程名稱困難,但這對(duì)防止結(jié)束共享電腦上其他人的進(jìn)程有幫助。
檢索進(jìn)程信息
Windows PowerShell中的get-process cmdlet可以幫助你檢索電腦中的進(jìn)程信息。不帶任何參數(shù)地運(yùn)行這個(gè)命令,你可以獲得如下所示的輸出:
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) ID ProcessName
------- ------ ----- ----- ----- ------ -- -----------
21018 4 2084 5036 35 1.84 496 1XConfig
103 5 1156 3560 32 0.08 2308 alg
69 2 604 2336 19 2.52 1176 ati2evxx
66 2 572 2216 19 1.58 1772 ati2evxx
668 8 3384 7592 63 25.98 1512 csrss
108 5 940 3756 35 0.95 2220 ctfmon
如果你不確定NPM、WS、VM這些縮寫分別代表什么,可以借助下面的表格。
資源名稱 縮寫 描述
Handles 無 進(jìn)程的智能指針編號(hào),對(duì)內(nèi)存的存儲(chǔ)區(qū)域開放。當(dāng)句柄(handles)關(guān)閉時(shí),內(nèi)存被釋放。
Non-paged pool (in kilobytes) NPM(non-paged memory) 非分頁池是從不分頁到硬盤的存儲(chǔ)器,因此訪問速度更快。
Paged pool (in kilobytes) PM(paged memory) 如果有空間需求,分頁池有可能發(fā)送給磁盤。這使得分頁池比非分頁池更大(因?yàn)榇鎯?chǔ)器空間僅受磁盤上的頁面文件限制)一些內(nèi)存讀取操作可能耗時(shí)更長,因?yàn)樾枰牡臄?shù)據(jù)存儲(chǔ)在硬盤上。
Working set (in kilobytes) WS 工作集是指一個(gè)進(jìn)程占用物理內(nèi)存的頁面集。只有存儲(chǔ)在物理內(nèi)存(當(dāng)前沒有分頁到磁盤)的數(shù)據(jù)才在工作集中。
Virtual memory (in megabytes) VM 只用于進(jìn)程的虛擬內(nèi)存數(shù)量。
CPU time (in seconds) CPU (s) 進(jìn)程占用的處理器時(shí)間(包括所有可用的處理器)。
Process ID 無 給定進(jìn)程的標(biāo)識(shí)符。即使在一臺(tái)共享式電腦上,每個(gè)進(jìn)程都只有一個(gè)的進(jìn)程ID。
Process name 無 進(jìn)程的易記標(biāo)識(shí),但不同于進(jìn)程ID,它不一定是的。
注意:你還會(huì)接觸到很多其它進(jìn)程屬性。要想查看它們的屬性名稱,鍵入get-process | get-member即可?;玖斜韺?duì)我們今天的目的來說已經(jīng)足夠了,但是如果你要操作這些進(jìn)程屬性,就需要查看完整的列表。
如何檢索負(fù)載的進(jìn)程
你不一定需要所有進(jìn)程的列表,但你有必要大致了解哪些進(jìn)程占用了大部分的資源。舉例來說,一個(gè)進(jìn)程的工作集(如上面的表格所描述)可以很好地指示其系統(tǒng)內(nèi)存壓力的情況。為了找出工作集大于10MB的所有進(jìn)程,輸入下面的命令:
get-process | where-object {$_.WorkingSet -gt 10000000}
記住,美元符號(hào)代表變量。現(xiàn)在我們來看這些進(jìn)程的名稱、工作集屬性及其工作集是否是大于(上面命令中的gt) 給定值的。
這個(gè)命令會(huì)找到每個(gè)進(jìn)程,并把結(jié)果發(fā)送給where-object cmdlet做評(píng)價(jià)。然后你就會(huì)收到跟完全列表格式一模一樣的一個(gè)列表,但這個(gè)列表要短得多。
結(jié)束不必要的進(jìn)程
如果你管理自己的電腦,很容易獲取一些無用進(jìn)程。比如,有一天你在機(jī)場(chǎng)想聯(lián)機(jī),最后可能在電腦里留下Boingo客戶端進(jìn)程。你下載過某一個(gè)系統(tǒng)審核軟件的試用版本嗎?即使你有幾個(gè)月都沒有使用過它,進(jìn)程列表仍可能包含系統(tǒng)審核代理。
當(dāng)然,任務(wù)管理器也可以為你顯示進(jìn)程。但get-process更容易查看數(shù)據(jù),比如你可以不使用滾動(dòng)條查看一個(gè)完整列表。你需要應(yīng)付這些垃圾進(jìn)程,但同時(shí)你也可以結(jié)束它們。(在終止一個(gè)進(jìn)程前你應(yīng)該確定知道自己在干什么,如果你并不確定哪個(gè)進(jìn)程是干什么用的,不要貿(mào)然結(jié)束它)
要結(jié)束一個(gè)進(jìn)程,先從整個(gè)列表或最消耗資源的前十個(gè)進(jìn)程中檢索出它們的識(shí)別信息。然后,運(yùn)行stop-process命令。如果不帶任何參數(shù)運(yùn)行該命令,它會(huì)提示你輸入進(jìn)程ID號(hào)(僅僅輸入進(jìn)程名稱是無法結(jié)束進(jìn)程的)。你可以根據(jù)自己意愿結(jié)束多個(gè)進(jìn)程。完成后,按Enter鍵就會(huì)退出cmdlet。
你也可以使用–name parameter,stop-process –name processname等命令通過名稱來停止進(jìn)程。然而,我并不推薦這樣做。你應(yīng)該養(yǎng)成用進(jìn)程ID結(jié)束進(jìn)程的習(xí)慣。盡管記住進(jìn)程ID比記住進(jìn)程名稱困難,但這對(duì)防止結(jié)束共享電腦上其他人的進(jìn)程有幫助。