立即终止 Windows 10/11 的任务?

立即终止 Windows 10/11 的任务?

我有一个全屏应用程序,它有时会挂起,然后突然减慢整个电脑的速度,占用系统内存,并以 100% 的负载占用 CPU。我知道你可以使用任务管理器关闭应用程序。唯一的问题是该应用程序会捕获每个鼠标和键盘输入,因此 CTRL+SHIFT+ESC 不起作用。

如果我使用 CTRL+ALT+DEL 功能调出锁定屏幕来打开任务管理器,我仍然无法使用它,因为我无法使用鼠标。使用 ALT+TAB 将焦点更改为任务管理器会将其显示在顶部,但鼠标仍然被困在应用程序中。使用键盘在任务管理器中导航也不起作用,因为应用程序会立即捕获任何键盘输入并将焦点更改回自身,任务管理器再次被隐藏。

勾选“保持在最前面”任务管理器至少可以让它保持在最前面,但我仍然无法用键盘或鼠标使用它。尝试按 ALT+TAB 然后选择任何其他窗口只会在短时间内改变焦点,然后又回到应用程序。按 Windows 键会弹出任务栏和开始菜单,但只要我尝试单击开始菜单或任务栏,右键单击或左键单击,应用程序就会回到最前面。无论我按多少次这个快捷方式,应用程序都不会响应 ALT+F4。

到目前为止我得到的唯一解决方案是使用 CTRL+ALT+DEL 锁定屏幕,然后注销我的帐户或直接关闭我的整个计算机。

有没有办法创建...像终止开关一样,它可以立即终止任何任务而不会提出任何问题,并且即使应用程序挂起并且我的计算机由于 CPU 和 RAM 超载而变慢也能正常工作?

答案1

而不是试图关闭应用程序它占用了所有资源,请尝试将其设置为以较低的优先级运行。您可以使用任务管理器细节选项卡,如下图所示:

设置进程优先级

不过,您也可以编写一个简短的脚本来启动应用程序,然后使用设置优先级降低 CPU 使用率:

start " " "<full_path_to_application"
wmic process where name="<process_name>" CALL setpriority 64

话虽如此,你的情况表明应用程序写得很糟糕!自 NT 以来,Windows 一直使用抢占式多任务. 虽然较旧的协作式多任务处理假设每个进程都是“礼貌的”,并且最终会将时间让给队列中的下一个进程,但抢占式多任务处理在暂停进程并让下一个进程在 CPU 上获得时间之前只分配了这么多时间,因此键盘和鼠标应该绝不不可用(尽管它们可能是非常响应缓慢)。您是否在 Windows 3.1 模拟器中运行旧应用程序?除非它是专有应用程序,否则您必须在您的工作环境中使用,寻找替代品。

答案2

您可以尝试这个受此代码启发的批处理文件在批处理文件中嵌入 PowerShell 代码为了循环运行并每分钟检查一次无响应的任务所以当他发现的时候,他就会杀了他们!


@echo off
@REM https://martin77s.wordpress.com/2018/01/25/embed-powershell-code-in-a-batch-file/
@Title Get And Kill No Responding Processes
@setlocal EnableDelayedExpansion
@set LF=^


@SET command=#
@FOR /F "tokens=*" %%i in ('findstr -bv @ "%~f0"') DO SET command=!command!!LF!%%i
@powershell -noprofile -noexit -command !command! & goto:eof


# *** POWERSHELL CODE STARTS HERE *** #
While ($True) {
    $DateTime = $Null
    $DateTime = get-date
    Try { 
        $Processes = Get-Process -EA Stop 
        $nProcesses = @($Processes | Where { $_.Responding -eq $false })
    } catch {
        Write-Error "Failed to query processes. $_"
    }
    if($nProcesses) {
        foreach($nProcess in $nProcesses) {
            $nProcess | select ID,Name, MainWindowTitle,Path
            Stop-process -Force $nProcess
        }
    } else {
            #Clear-Host
            Write-host "$DateTime - All processes are OK and are responding." -ForegroundColor Yellow 
        }
    Start-Sleep -s 60
}

相关内容