0

私はあなたがこれで私を助けてくれることを願っています.私は何時間も研究を試みましたが、どこにも行けないようです.

1 日に数回ランダムに 50 以上の CPU を消費し始めるプロセスがあります。バックグラウンドで実行され、プロセスの CPU 使用率が 50 を超えた場合にサービスを再起動するバッチ ファイルを作成しようとしています (問題)。

このフォーラムで非常に近いものを見つけました.「Elektro Hacker」という男が答えましたが、彼の答えは特定のプロセスの使用率だけでなく、全体的なCPU使用率です. 彼が提案したバッチファイルは次のとおりです。

@Echo OFF

SET    "SERVICE=Themes"
SET /A "MAXUSAGE=95"
SET /A "INTERVAL=5"

:LOOP 
For /F %%P in ('wmic cpu get loadpercentage ^| FINDSTR "[0-9]"') do (
    IF %%P GTR %MAXUSAGE% (
        Echo [%TIME:~0,8%] CPU Usage: %%P%% Reached the limit: %MAXUSAGE%%%
        Echo Restarting %SERVICE% ...
         SC STOP  "%SERVICE%" 1>NUL
        SC START "%SERVICE%" 1>NUL
        Echo Service restarted.
    ) ELSE (
         Echo [%TIME:~0,8%] CPU Usage: %%P%%
    )
)
Ping -n %INTERVAL% Localhost >NUL
GOTO :LOOP

彼はまた、次のように述べています。

wmic path Win32_PerfFormattedData_PerfProc_Process get Name,PercentProcessor
Time

これは私が乗り越えることができない部分であり、エラーが発生し続け、少し変更して修正しようとするたびに、さまざまなエラーが発生します!

誰かがこのコードを少し変更して、たとえば「MyProcess」のCPUを取得できるようにすることはできますかプロセスとサービスの名前が異なります。これが違いを生むかどうかはわかりませんが、言及する価値があると思いました

私のコーディング知識はせいぜい最小限なので、あなたが私に与えることができる助けやアドバイスは大歓迎です.これは私の狂気です!

どうもありがとう!

4

3 に答える 3

1

Powesshellはもっとうまくやれる

get-process wmiprvse | select processname,cpu,id | ? {$_.cpu -gt 90 -and $_.id} | foreach { restart-service winmgmt }
于 2016-06-13T15:41:15.130 に答える