C# 关闭';它导致CPU过热

C# 关闭';它导致CPU过热,c#,vb.net,batch-file,vbscript,batch-processing,C#,Vb.net,Batch File,Vbscript,Batch Processing,你看,我使用CoreTemp程序来监控CPU热量,这个程序允许你在CPU温度达到指定值时运行脚本或程序 我想要的是,当CPU温度达到某个值时,CPU使用率最高的进程将被关闭 换句话说,我需要一个脚本/程序来自动扫描进程并强制关闭CPU使用率最高的进程。 谢谢 试试这个: 检查内存使用率较高的程序: @echo off setlocal EnableDelayedExpansion for /f "skip=4 tokens=1-5 delims= " %%a in ('tasklist') do

你看,我使用CoreTemp程序来监控CPU热量,这个程序允许你在CPU温度达到指定值时运行脚本或程序

我想要的是,当CPU温度达到某个值时,CPU使用率最高的进程将被关闭

换句话说,我需要一个脚本/程序来自动扫描进程并强制关闭CPU使用率最高的进程。

谢谢

试试这个:

检查内存使用率较高的程序:

@echo off
setlocal EnableDelayedExpansion
for /f "skip=4 tokens=1-5 delims= " %%a in ('tasklist') do (
set $Size=00000000%%e
set $Size=!$size:.=!
set #!$size:~-10!=%%a
)
for /f "tokens=2 delims==" %%a in ('set #') do (set $Bigger=%%a)

echo taskkill /IM !$Bigger!
@echo off
setlocal EnableDelayedExpansion
for /f "skip=2 tokens=1-2 delims= " %%a in ('"wmic path Win32_PerfFormattedData_PerfProc_Process get Name,PercentProcessorTime"') do (
if "%%a"=="_Total" goto:next
set #%%b=%%a
)    
:next    

for /f "tokens=1-2 delims==" %%a in ('set #') do (
set $Bigger=%%b
set $Value=%%a
)
if "!$Value!"=="#0" goto:nothing
echo taskkill /IM !$Bigger!.exe [!$Value:#=!%%]
goto:eof

:nothing
Echo CPU IS INACTIVE
检查CPU使用率较高的进程:

@echo off
setlocal EnableDelayedExpansion
for /f "skip=4 tokens=1-5 delims= " %%a in ('tasklist') do (
set $Size=00000000%%e
set $Size=!$size:.=!
set #!$size:~-10!=%%a
)
for /f "tokens=2 delims==" %%a in ('set #') do (set $Bigger=%%a)

echo taskkill /IM !$Bigger!
@echo off
setlocal EnableDelayedExpansion
for /f "skip=2 tokens=1-2 delims= " %%a in ('"wmic path Win32_PerfFormattedData_PerfProc_Process get Name,PercentProcessorTime"') do (
if "%%a"=="_Total" goto:next
set #%%b=%%a
)    
:next    

for /f "tokens=1-2 delims==" %%a in ('set #') do (
set $Bigger=%%b
set $Value=%%a
)
if "!$Value!"=="#0" goto:nothing
echo taskkill /IM !$Bigger!.exe [!$Value:#=!%%]
goto:eof

:nothing
Echo CPU IS INACTIVE
如果输出正常,请删除最后一行上的
ECHO

你可以改进剧本。如果您有两个同名的ProcessU,您必须使用进程的PID来代替名称。因为程序将返回程序#1、程序#2等。。这只是基本脚本。
就像@09stephenb评论的那样,你必须带着这样的剧本走下去

我开始为你做这件事,但我得走了。它基本上已经完成了,所以我会给你我到目前为止所拥有的,让你从那里得到它

@echo off
setlocal

set proc=Win32_PerfFormattedData_PerfProc_Process
set "wmi=wmic path %proc% get Name^,PercentProcessorTime"
for /f "skip=1 tokens=*" %%a in ('"%wmi%"^|findstr /i /v /g:Excludes.txt') do (
   for /f "tokens=2 delims= " %%b in ( "%%a" ) do if %%b NEQ 0 echo %%a
)
创建一个名为Excludes.txt的文件,并确保它位于脚本的同一目录中

"System Idle Process"
Idle
explorer.exe
taskmgr.exe
lsass.exe
csrss.exe
smss.exe
winlogon.exe
svchost.exe
services.exe
Core Temp
_Total

感谢您的回答,只有这是工作的内存使用,它返回的进程有最高的内存使用率,但我想要的是完全相同的事情,但CPU使用!!这有三个问题。首先,像这样一直运行的程序会使CPU变得更热。其次,程序可以在不到一秒钟的时间内从100%变为1%,因此,如果导致问题的程序下降,错误的程序被终止,该怎么办。最后,当您移动文件时,CPU会变得太热,从而导致资源管理器死机。这将使您的计算机在重新启动之前无法使用,并且在文件移动期间杀死它也会损坏文件。定义“CPU使用率最高”。你是说在这一点上,在最后一分钟还是你的定义?这种方法可能会出现很多问题,但如果你想这样做,至少你必须对你想针对的过程给出一个可行的定义。