วิธีกำหนดค่ากระบวนการบริการ Windows ให้ทำงานโดยมีลำดับความสำคัญต่ำ


17

มีวิธีกำหนดค่ากระบวนการบริการ Windows (เช่น squidNT, SQL Server ฯลฯ ) ให้เริ่มโดยอัตโนมัติโดยมีลำดับความสำคัญต่ำโดยไม่เปลี่ยนลำดับความสำคัญของกระบวนการด้วยตนเองผ่านทาง Task Manager หรือไม่


การเปลี่ยนลำดับความสำคัญของเธรดหรือกระบวนการมักเป็นความคิดที่ไม่ดีเว้นแต่จะมีการเขียนโค้ดเพื่อให้ทำงานที่ลำดับความสำคัญต่างกัน การเปลี่ยนลำดับความสำคัญจะเพิ่ม "ลำดับความสำคัญกลับกัน" ในรายการปัญหาการเกิดพร้อมกันเพื่อหลีกเลี่ยง
ริชาร์ด

1
OP ไม่ได้ถามว่ามันเป็นความคิดที่ดีหรือไม่ สหกรณ์ถามถ้ามันสามารถทำได้และวิธีการ - โปรดอย่าลืมอยู่ในหัวข้อ 😉
BrainSlugs83

คำตอบ:


11

Service Control Manager ซึ่งจัดการการเริ่ม / หยุดบริการไม่มีกลไกใด ๆ (ใน Windows รุ่นก่อนหน้านี้) เพื่อระบุลำดับความสำคัญของกระบวนการที่เริ่มต้น

เนื่องจากคุณสามารถปรับเปลี่ยนลำดับความสำคัญในกระบวนการที่รันอยู่แล้วทางออกที่ดีที่สุดของคุณคือการใช้เครื่องมือในการทำเช่นนั้น

ฉันไม่ทราบว่าเครื่องมือบรรทัดคำสั่งของ Microsoft เพื่อปรับเปลี่ยนลำดับความสำคัญของกระบวนการ แต่บรรทัดคำสั่ง "PV" ก็มีให้ที่http://www.teamcti.com/pview/prcview.htmมีฟังก์ชั่นเพื่อกำหนดลำดับความสำคัญ .

pv -pb process-name.exe

ที่จะตั้งค่า "process-name.exe" เป็น "ต่ำกว่าปกติ" ลำดับความสำคัญ

หากคุณสามารถใช้ชีวิตกับกระบวนการที่เริ่มต้นที่ "ปกติ" ลำดับความสำคัญจนกว่าคุณจะได้รับการเปลี่ยนแปลงคุณสามารถทำได้ด้วยสคริปต์ที่เรียกใช้เป็น "งานตามกำหนดเวลา" เพื่อดับทุก ๆ ครั้ง (ในกรณีที่บริการได้รับ เด้ง)

มันเป็นการแฮ็คที่รวดเร็วและสกปรก แต่ฉันติดหนี้โชคลาภมากมายในชีวิตเพื่อแฮ็กที่รวดเร็วและสกปรกที่ทำงานให้เสร็จ!


อาจเรียกใช้แบตช์ไฟล์เพื่อเริ่มแอพแล้วกำหนดลำดับความสำคัญของกระบวนการโดยอาจเป็นช่วงเวลาสั้น ๆ ระหว่างการรันแอพโดยตรงจากนั้นเรียกใช้งานอื่นเพื่อตั้งค่าลำดับความสำคัญ จะไม่ทำงานให้ทุกอย่าง แต่ควรลองทำดู
John Gardeniers

3

คำตอบข้างต้นไม่ได้ผลสำหรับฉัน ฉันสิ้นสุดการสร้างสคริปต์ powershell ต่อไปนี้:

ChangePriority.ps1

Get-WmiObject Win32_process -Filter 'name="ProcessName.exe"' | ForEach-Object {$_.SetPriority(128)}

จากนั้นฉันก็สร้างงานตามกำหนดเวลาที่เรียกมันว่าทุกๆ 5 นาที จากพรอมต์ผู้ดูแลระบบหรือชุดสคริปต์:

schtasks /Create /tn "Process Priority Change" /sc MINUTE /mo 5 /ru SYSTEM /tr "powershell -noprofile -executionpolicy bypass -file \"%cd%\ChangePriority.ps1\""

พยายามใช้wmicตามที่กล่าวไว้ที่นี่เพื่อทำให้ภารกิจที่กำหนดไว้ไม่ขึ้นกับไฟล์ล้มเหลว Similary ใช้สคริปต์ PowerShell: ฉันไม่สามารถสร้างคำสั่งเดียวที่เพิ่งสร้างงานด้วยสคริปต์แบบอินไลน์ เห็นคุณค่าถ้าคุณพยายามที่จะทำและเพิ่มคำตอบอื่น

ค่าของลำดับความสำคัญในสคริปต์ powershell สามารถพบได้ที่นี่ [1]

[1] https://docs.microsoft.com/en-us/windows/desktop/cimwin32prov/setpriority-method-in-class-win32-process


มีประโยชน์มาก. ฉันสับบรรทัดที่มีทักษะ ps ที่ไม่ดีของฉันเพื่อตั้งค่าบริการเสียงที่มีกระบวนการโฮสต์บริการเป็นเรียลไทม์เพื่อป้องกันเสียงแตกระหว่างการใช้งาน cpu หนัก (ไดรเวอร์ที่ไม่ดีฉันเดา) ใช้งานได้ดี!
JasonXA

@JasonXA ยินดีต้อนรับ ชื่นชมถ้าคุณสามารถให้รุ่นหนึ่งบรรทัดของมันซึ่งฉันไม่สามารถ
ceztko

แน่นอน: PowerShell.exe -noprofile -executionpolicy บายพาส - คำสั่ง "& {Get-WmiObject Win32_service -Filter \" Name = 'AudioSrv' \ "| ForEach {Get-WmiObject Win32_process -Filter \" ProcessId = $ ($ _. ProcessId) \ "} | ForEach-Object {$ _. SetPriority (256)}}" ฉันไม่รู้ว่ามันถูกต้องแค่ไหน ... แต่ก็ใช้งานได้ ฉันไม่ได้จัดการเพื่อให้มันซ่อนอยู่สามารถทำงานได้ภายใต้ผู้ใช้ที่มีสิทธิ์ของผู้ดูแลระบบ
JasonXA

1

ต่อไปนี้อาจใช้งานได้ แก้ไขคีย์รีจิสทรี ImagePath และใช้คำสั่ง start จาก cmd.exe:

START ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
      [/WAIT] [/B] [command/program]
      [parameters]

น่าเสียดายที่นี่ใช้งานไม่ได้เลยตั้งแต่การปฏิบัติการที่เปิดตัวImagePathต้องเคารพอินเทอร์เฟซสำหรับบริการของ Windows และstartไม่ได้ดำเนินการและจะไม่นำสิ่งนี้ไปสู่การปฏิบัติการ
ceztko

0

ฉันต้องทำอย่างนั้นเพื่อให้ teamcity ใช้ cpu น้อยลง และเนื่องจาก teamcity เป็นแอปพลิเคชันจาวาเดียวที่เรากำลังเรียกใช้โซลูชั่นดังกล่าวทำงานได้อย่างสมบูรณ์แบบ

  1. ตั้งค่าบริการเป็นการเริ่มต้น "ด้วยตนเอง"
  2. สร้างไฟล์แบตช์ที่จะเริ่มบริการของคุณและลดความสำคัญเช่น:

    เริ่มต้น
    สุทธิ tcbuildagent
    กระบวนการเริ่มต้นสุทธิทีมwmic โดยที่ name = "java.exe" CALL setpriority "ต่ำกว่าปกติ"

  3. สร้างงาน "task scheduler" ซึ่งจะเปิดขึ้นที่ "windows startup" ซึ่งจะเปิดไฟล์แบตช์นั้น

ฉันกำหนดค่าทริกเกอร์ TaskScheduler ด้วยความล่าช้า 1 นาทีเพื่อไม่รบกวนการทำงานของบริการอื่น ๆ ที่เริ่มต้น

ป.ล. คุณยังสามารถตั้งค่าการเริ่มต้นบริการทั้งหมดของคุณด้วยตนเองและใช้ไฟล์ชุดนั้นเพื่อเริ่มต้นทั้งหมดตามลำดับที่คุณต้องการ SQL, IIS และอื่น ๆ


0

คุณสามารถสคริปต์ PowerShell ต่อไปนี้วางไว้ในงานที่กำหนดเวลาไว้ที่ทำงานเมื่อเริ่มต้น

do {
    start-sleep -s 5
    $obj = Get-WmiObject Win32_process -Filter 'name="processname"'
} while ($obj -eq $null)
$obj.SetPriority(16384)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.