การเปลี่ยนลำดับความสำคัญของกระบวนการ Windows ผ่านทางบรรทัดคำสั่ง


41

ฉันต้องการเปลี่ยนลำดับความสำคัญของกระบวนการ Windows ผ่านทางบรรทัดคำสั่ง

ฉันจะทำสิ่งนั้นได้อย่างไร

คำตอบ:


54

ไวยากรณ์บรรทัดคำสั่ง:

wmic process where name="AppName" CALL setpriority ProcessIDLevel

ตัวอย่าง:

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

หรือ

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

ลำดับความสำคัญ:

  • ว่าง: 64 (หรือ "ว่าง")
  • ด้านล่างปกติ: 16384 (หรือ "ต่ำกว่าปกติ")
  • ปกติ: 32 (หรือ "ปกติ")
  • เหนือปกติ: 32768 (หรือ "เหนือปกติ")
  • ลำดับความสำคัญสูง: 128 (หรือ "ลำดับความสำคัญสูง")
  • เวลาจริง: 256 (หรือ "เรียลไทม์")


เป็นไปได้ที่จะทำเช่นเดียวกันสำหรับพื้นหลัง (IO ต่ำและลำดับความสำคัญของหน่วยความจำ) เช่นเดียวกับใน Process Explorer?
miky

มันจะทำงานได้แม้ใน "cmd.exe" จากแบทช์? ... แบทช์ที่จะเริ่มต้น cmd.exe นั้น
gamer0

หมายเหตุ: ชุดคำพูดชุดแรกจำเป็นต้องมีดังนั้นในเชลล์อื่น ๆ ต้องใส่เครื่องหมายอัญประกาศ (หรือเครื่องหมายคำพูดคู่) ใน Cygwin:wmic process where 'name="calc.exe"' CALL setpriority "idle"
piojo

2
ทำไมต่ำกว่า / สูงกว่าค่าปกติจึงใหญ่และแปลก และทำไมเป็นปกติน้อยกว่าทั้งว่างและเวลาจริง
phuclv

11

นอกจากนี้ขนาดเล็ก

คุณยังสามารถใช้ค่าสตริงแทนจำนวนเต็ม (ง่ายต่อการจดจำ) เช่นนั้น:

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

ค่าที่เป็นไปได้: "ไม่ได้ใช้งาน", "ต่ำ", "ต่ำกว่าปกติ", "ปกติ", "เหนือปกติ", "ลำดับความสำคัญสูง", "เรียลไทม์"

PS อย่าลืมเครื่องหมายคำพูดโดยเฉพาะถ้าใช้หลายคำในค่าสตริง


จำเป็นต้องใช้ชุดคำพูดชุดแรกแม้ว่าจะไม่ได้ใช้หลายคำก็ตาม มันจะต้องถูกส่งผ่านไปยังคำสั่งแทนที่จะถูกตีความโดยเชลล์
piojo

ใน win10 Pro 1809 "low" ไม่ใช่ค่าที่รู้จัก - มันจะพ่นข้อผิดพลาด การใช้ "Idle" ทำให้กระบวนการแสดงเป็นลำดับความสำคัญ "ต่ำ" ในตัวจัดการงาน ...
ljwobker

5

จากบรรทัดคำสั่งแบทช์ฉันก็แค่ใช้ PowerShell ตัวอย่างนี้เริ่ม calc.exe ค้นหากระบวนการและปรับระดับความสำคัญเป็น "IDLE" หรือที่รู้จักว่า LOW:

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

ระบุหนึ่งในค่าการแจงนับต่อไปนี้: " Normal, Idle, High, RealTime, BelowNormal, AboveNormal"

นี่คือสิ่งเดียวกันจาก PowerShell ด้วยเส้นแบ่ง:

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

อะไรคือสิ่งที่ทำซ้ำสิ่งที่พูดไปแล้วมาก่อน?
harrymc

@harrymc มันตอบคำถามเดิมโดยใช้ PowerShell
Paradroid

@harrymc - จริง ๆ แล้วฉันซ้ำสิ่งที่ฉันพูดจากธันวาคม stackoverflow.com/questions/20693028/…
Knuckle-Dragger

ไม่มีปัญหา. เพียงแค่ฉันเชื่อมโยงกับสิ่งที่คล้ายกันสวย
harrymc

5

นอกเหนือจากคำตอบที่มีอยู่แล้วคำถามที่เทียบเท่ากับ Windows ของ 'nice' แสดงวิธีแก้ปัญหาเพิ่มเติม:

  1. การใช้คำสั่ง STARTใน command-prompt (CMD)
  2. การใช้ProcessTamerฟรีเพื่อตั้งค่ากฎใน. exe ที่บังคับใช้โดยอัตโนมัติเมื่อใดก็ตามที่กระบวนการนั้นเริ่มต้นขึ้น
  3. การใช้สคริปต์ PowerShell มีอยู่ที่นี่
  4. การใช้สคริปต์ VBScript มีอยู่ที่นี่

นอกจากนี้ยูทิลิตี้SetPriority แบบเก่าอาจยังใช้งานได้ แต่ฉันไม่ได้ลองมาหลายปีแล้ว

บางส่วนของการแก้ปัญหาเหล่านี้อาจไม่ทำงานในการให้บริการของระบบหรืออาจต้องมีการเรียกใช้ในฐานะผู้ดูแลระบบ


อุปสรรคที่ชัดเจนกับโซลูชัน vbScript คือการใช้รหัส 23 บรรทัดในการทำงานให้สำเร็จ (เช่นตั้งค่าระดับความสำคัญ) ซึ่งคำสั่ง START ใช้เวลาเพียง 2 บรรทัดในการทำเช่นนั้น (หนึ่งที่เหน็บแนม พรอมต์คำสั่งเปล่า): เริ่ม "" / เรียลไทม์ / b / w program.exe
Ed999

1

ฉันใช้ Windows 7 64 บิต

wmicคำสั่งไม่น่าเชื่อถือ จากประสบการณ์ที่ผ่านมาของฉันมันล้มเหลวอย่างกะทันหันด้วยเหตุผลมากมาย

คำสั่งที่ดีที่สุดที่เป็นไปได้เนื่องจากความน่าเชื่อถือของมันคือคำสั่ง START ไวยากรณ์ง่ายมาก (นี่คือคำสั่งเรียกใช้ 3 บรรทัดสำหรับไฟล์แบตช์ ):

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

ในความคิดของฉันความน่าเชื่อถือในระดับสูงนั้นเกิดจากการที่มันตั้งค่าระดับความสำคัญที่โปรแกรม. exe เปิดตัวแทนที่จะพยายามเข้าไปยุ่งกับลำดับความสำคัญหลังจากโปรแกรมเริ่มทำงานด้วยลำดับความสำคัญที่แตกต่างกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.