Thay đổi ưu tiên xử lý Windows thông qua dòng lệnh


42

Tôi muốn thay đổi ưu tiên quá trình Windows thông qua dòng lệnh.

Làm thế nào tôi có thể làm điều đó?

Câu trả lời:


55

Cú pháp dòng lệnh:

wmic process where name="AppName" CALL setpriority ProcessIDLevel

Thí dụ:

wmic process where name="calc.exe" CALL setpriority 32768

hoặc là

wmic process where name="calc.exe" CALL setpriority "above normal"

Sự ưu tiên:

  • nhàn rỗi: 64 (hoặc "nhàn rỗi")
  • dưới mức bình thường: 16384 (hoặc "dưới mức bình thường")
  • bình thường: 32 (hoặc "bình thường")
  • trên mức bình thường: 32768 (hoặc "trên mức bình thường")
  • mức độ ưu tiên cao: 128 (hoặc "mức độ ưu tiên cao")
  • thời gian thực: 256 (hoặc "thời gian thực")

7
Bạn cũng có thể thực hiện các ký tự đại diện wmic process where "CommandLine like '%calc%'" CALL setpriority "below normal"
laggingreflex

Có thể làm tương tự cho Nền (IO thấp và ưu tiên bộ nhớ) như trong Process Explorer không?
miky

điều này sẽ hoạt động ngay cả trên "cmd.exe" từ lô? ... lô nào sẽ bắt đầu cmd.exe đó?
game thủ0

Lưu ý: bộ dấu ngoặc kép đầu tiên là bắt buộc, vì vậy trong các shell khác, dấu ngoặc kép phải được thoát (hoặc trích dẫn kép). Trong Cygwin:wmic process where 'name="calc.exe"' CALL setpriority "idle"
piojo

2
Tại sao giá trị dưới / trên bình thường lại lớn và lạ như vậy? Và tại sao bình thường ít hơn cả nhàn rỗi và thời gian thực?
phuclv

11

Một bổ sung nhỏ.

Bạn cũng có thể sử dụng các giá trị chuỗi thay vì số nguyên (dễ nhớ hơn) như thế:

 wmic process where name="calc.exe" CALL setpriority "idle"

Các giá trị có thể: "nhàn rỗi", "thấp", "dưới mức bình thường", "bình thường", "trên mức bình thường", "mức độ ưu tiên cao", "thời gian thực"

Tái bút Đừng quên dấu ngoặc kép, đặc biệt nếu sử dụng nhiều từ trong giá trị chuỗi


Nhóm trích dẫn đầu tiên là bắt buộc, ngay cả khi không sử dụng nhiều từ. Nó cũng phải được truyền cho lệnh, thay vì được giải thích bởi shell.
piojo

Trên win10 Pro 1809, "thấp" không phải là giá trị được công nhận - nó gây ra lỗi. sử dụng "Không sử dụng" khiến quá trình được hiển thị ở mức ưu tiên "thấp" trong trình quản lý tác vụ ...
ljwobker

5

Từ dòng lệnh hàng loạt, tôi chỉ cần sử dụng PowerShell. Ví dụ này bắt đầu calc.exe, tìm quy trình của nó và điều chỉnh lớp ưu tiên của nó thành "IDLE", còn gọi là THẤP:

start /b /wait powershell.exe -command "calc.exe;$prog = Get-Process -Name calc;$prog.PriorityClass = [System.Diagnostics.ProcessPriorityClass]::IDLE"

Chỉ định một trong các giá trị liệt kê sau: " Normal, Idle, High, RealTime, BelowNormal, AboveNormal"

Đây là điều tương tự từ PowerShell với các dòng chia:

calc.exe
$prog = Get-Process -Name calc
$prog.PriorityClass = [System.Diagnostics.ProcessPriorityClass]::IDLE

Điểm lặp lại những gì đã nói trước đây là gì?
harrymc

@harrymc Nó trả lời câu hỏi ban đầu, sử dụng PowerShell.
paradroid

@harrymc - thực sự tôi đang nhắc lại những gì tôi đã nói từ DEC. stackoverflow.com/questions/20693028/
Mạnh

Không vấn đề gì. Chỉ là tôi liên kết với một cái gì đó khá giống nhau.
harrymc

5

Ngoài các câu trả lời hiện có, câu hỏi Windows Equivalent of 'beautiful' liệt kê một số giải pháp khác:

  1. Sử dụng lệnh START trong dấu nhắc lệnh (CMD).
  2. Sử dụng ProcessTamer miễn phí để thiết lập quy tắc trên .exe được tự động thực thi bất cứ khi nào quá trình đó được bắt đầu.
  3. Sử dụng tập lệnh PowerShell có ở đây .
  4. Sử dụng tập lệnh VBScript có ở đây .

Ngoài ra, tiện ích SetP Warriority cũ có thể vẫn hoạt động, nhưng tôi đã không thử nó trong nhiều năm nay.

Một số giải pháp này có thể không hoạt động trên các dịch vụ hệ thống hoặc có thể cần được Chạy với tư cách Quản trị viên .


Nhược điểm rõ ràng với giải pháp vbScript là phải mất 23 dòng mã để hoàn thành nhiệm vụ của mình (nghĩa là đặt mức độ ưu tiên), trong đó lệnh START chỉ mất 2 dòng để làm như vậy (một, tại một nhúm, do đó nó thậm chí hoạt động ở một dấu nhắc lệnh trần): start "" / realtime / b / w program.exe
Ed999

1

Tôi đang chạy Windows 7 64-bit.

Các wmic lệnh là không đáng tin cậy. Theo kinh nghiệm đáng kể của tôi, nó thất bại bất ngờ vì quá nhiều lý do (chủ yếu là không thể giải thích được).

Lệnh tốt nhất có thể, vì độ tin cậy của nó, là lệnh START. Cú pháp rất đơn giản (đây là lệnh chạy 3 dòng cho một tệp bó ):

::  Boost thread priority
SET command=<program.exe> <options>
start "" /REALTIME /B /W  %command%

Theo tôi, mức độ tin cậy cao của nó xuất phát từ thực tế là nó đặt mức độ ưu tiên mà chương trình .exe được khởi chạy, thay vì cố gắng can thiệp vào mức độ ưu tiên sau khi chương trình bắt đầu chạy với mức độ ưu tiên khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.