Computer >> คอมพิวเตอร์ >  >> ระบบ >> Windows Server

ฆ่าบริการ Windows ที่ติดอยู่ในการหยุดหรือเริ่มทำงาน

วิธีฆ่ากระบวนการบริการ Windows ด้วยตนเองที่สแต็กที่ “Stopping ” หรือ “Starting " สถานะ? ผู้ดูแลระบบ Windows ส่วนใหญ่ประสบปัญหาเมื่อพยายามเริ่ม/หยุด/เริ่มบริการใหม่ แต่เกิดปัญหากับ การหยุด (หรือ เริ่มต้น ) สถานะ. คุณจะไม่สามารถหยุดบริการนี้จากคอนโซลการจัดการบริการ (services.msc ) เนื่องจากปุ่มควบคุมทั้งหมดสำหรับบริการนี้จะไม่ทำงาน (เป็นสีเทา) วิธีที่ง่ายที่สุดคือรีสตาร์ท Windows แต่ก็ไม่เป็นที่ยอมรับเสมอไป มาดูวิธีอื่น ๆ กัน ซึ่งช่วยให้สามารถฆ่าบริการ Windows ที่ค้างอยู่หรือกระบวนการโดยไม่ต้องรีบูตระบบ

ฆ่าบริการ Windows ที่ติดอยู่ในการหยุดหรือเริ่มทำงาน

หากภายใน 30 วินาทีหลังจากพยายามหยุดบริการแล้ว บริการไม่หยุด Windows จะแสดงข้อความนี้:

Windows Could not stop the xxxxxx service on Local Computer
Error 1053: The service did not respond in a timely fashion.
ระยะหมดเวลาที่ Service Control Manager รอให้บริการเริ่มต้นหรือหยุดสามารถเปลี่ยนแปลงได้โดยใช้ ServicesPipeTimeout พารามิเตอร์รีจิสทรี หากบริการไม่เริ่มทำงานภายในระยะหมดเวลาที่ระบุ Windows จะส่งข้อผิดพลาดไปที่ Event Viewer (รหัสเหตุการณ์:7000, 7009, 7011 ระยะหมดเวลาถึง 30000 มิลลิวินาที ). คุณเพิ่มระยะหมดเวลานี้เป็น 60 วินาทีได้ เช่น

reg add HKLM\SYSTEM\CurrentControlSet\Control /v ServicesPipeTimeout /t REG_SZ /d 600000 /f

สิ่งนี้มีประโยชน์เมื่อเริ่ม/หยุดบริการจำนวนมากที่ไม่มีเวลาเพียงพอที่จะยุติกระบวนการทั้งหมดอย่างถูกต้องและปิดไฟล์ (เช่น MS SQL Server)

หากคุณพยายามหยุดบริการดังกล่าวจากพรอมต์คำสั่ง:net stop wuauserv , มีข้อความปรากฏขึ้น:

The service is starting or stopping. Please try again later.

ฆ่าบริการ Windows ที่ติดอยู่ในการหยุดหรือเริ่มทำงาน

หรือ:

Windows could not stop the Service on Local Computer.
[SC] ControlService Error 1061: The service cannot accept control messages at this time.

สารบัญ:

  • จะบังคับฆ่าบริการ Windows ที่ค้างโดยใช้ TaskKill ได้อย่างไร
  • บังคับหยุดบริการ Windows ที่ค้างด้วย PowerShell
  • วิเคราะห์การรอโซ่บนบริการ Hung โดยใช้ ResMon
  • การฆ่าบริการที่หยุดทำงานโดยใช้ Process Explorer

จะบังคับฆ่าบริการ Windows ที่ค้างโดยใช้ TaskKill ได้อย่างไร

วิธีที่ง่ายที่สุดในการหยุดบริการที่ค้างอยู่คือการใช้ taskkill . ในตัว เครื่องมือบรรทัดคำสั่ง ก่อนอื่น คุณต้องหา PID (ตัวระบุกระบวนการ) ของบริการ ตัวอย่างเช่น มาใช้บริการ Windows Update ชื่อระบบคือ wuauserv (คุณสามารถตรวจสอบชื่อในคุณสมบัติของบริการได้ใน services.msc คอนโซล)

เป็นเรื่องปกติมากที่บริการตัวติดตั้งโมดูล Windows หยุดทำงานเมื่อรีสตาร์ทเซิร์ฟเวอร์ โดยเฉพาะหลังจากติดตั้งการอัปเดตใน Windows Server 2012 R2 และ 2016สำคัญ . เอาใจใส่ การบังคับยุติบริการ Windows ที่สำคัญอาจส่งผลให้ BSOD หรือการรีสตาร์ทระบบโดยไม่คาดคิด

เรียกใช้คำสั่งนี้ในพรอมต์คำสั่งที่ยกระดับ (เป็นสิ่งสำคัญ มิฉะนั้น ข้อผิดพลาดในการปฏิเสธการเข้าถึงจะปรากฏขึ้น):
sc queryex wuauserv
ในกรณีของเรา PID ของบริการ wuauserv คือ 9186
หากต้องการบังคับให้หยุดกระบวนการที่ค้างอยู่ด้วย PID 9186 ให้เรียกใช้คำสั่ง:

taskkill /PID 9168 /F

ฆ่าบริการ Windows ที่ติดอยู่ในการหยุดหรือเริ่มทำงาน

SUCCESS: The process with PID 9168 has been terminated.

คำสั่งนี้จะบังคับให้ยุติกระบวนการบริการ ตอนนี้คุณสามารถเริ่มบริการด้วย sc start servicename คำสั่งหรือผ่านคอนโซลการจัดการบริการ

คุณสามารถหยุดบริการที่หยุดชั่วคราวได้อย่างสวยงามยิ่งขึ้นโดยไม่ต้องตรวจสอบ PID ของกระบวนการบริการด้วยตนเอง เครื่องมือ taskkill มี /FI ซึ่งช่วยให้คุณใช้ตัวกรองเพื่อเลือกบริการหรือกระบวนการที่จำเป็น คุณสามารถฆ่าบริการเฉพาะด้วยคำสั่ง:

taskkill /F /FI "SERVICES eq wuauserv"

หรือคุณสามารถข้ามชื่อบริการได้เลยและปิดบริการทั้งหมดในสถานะหยุดทำงานด้วยคำสั่ง:

taskkill /F /FI "status eq not responding"

หลังจากนั้น บริการที่สแต็กอยู่ในสถานะหยุดควรหยุดลง

คุณยังสามารถใช้ยูทิลิตี taskkill เพื่อบังคับให้หยุดบริการแฮงค์บนคอมพิวเตอร์ระยะไกลได้:

taskkill /S mun-fs01 /F /FI "SERVICES eq wuauserv"

บังคับหยุดบริการ Windows ที่ค้างด้วย PowerShell

คุณยังสามารถใช้ PowerShell เพื่อบังคับให้บริการหยุดทำงาน เมื่อใช้คำสั่งต่อไปนี้ คุณจะได้รับรายการบริการในสถานะการหยุด:

Get-WmiObject -Class win32_service | Where-Object {$_.state -eq 'stop pending'}

หรือในสถานะเริ่มต้น:

Get-WmiObject -Class win32_service | Where-Object {$_.state -eq 'start pending'}

ฆ่าบริการ Windows ที่ติดอยู่ในการหยุดหรือเริ่มทำงาน

หยุดกระบวนการ cmdlet อนุญาตให้ยกเลิกกระบวนการของบริการที่พบทั้งหมด สคริปต์ PowerShell ต่อไปนี้จะยุติกระบวนการบริการที่ค้างอยู่บน Windows:

$Services = Get-WmiObject -Class win32_service -Filter "state = 'stop pending'"
if ($Services) {
foreach ($service in $Services) {
try {
Stop-Process -Id $service.processid -Force -PassThru -ErrorAction Stop
}
catch {
Write-Warning -Message "Error. Error details: $_.Exception.Message"
}
}
}
else {
Write-Output "No services with 'Stopping'.status"
}

ฆ่าบริการ Windows ที่ติดอยู่ในการหยุดหรือเริ่มทำงาน

คุณต้องใช้ Get-CimInstance แทนที่จะเป็น Get-WmiObject cmdlet ใน PowerShell Core 6.x/7.x ใหม่ แทนที่คำสั่งแรกของสคริปต์ด้วย:

$Services = Get-CimInstance -Class win32_service | where-Object state -eq 'stop pending'

วิเคราะห์การรอโซ่บน Hung Services โดยใช้ ResMon

คุณสามารถตรวจพบกระบวนการที่ทำให้บริการหยุดทำงานโดยใช้ resmon.exe (ตัวตรวจสอบทรัพยากร)

  1. ในหน้าต่างตัวตรวจสอบทรัพยากร ไปที่แท็บ CPU และค้นหากระบวนการบริการที่หยุดทำงาน
  2. เลือกรายการ วิเคราะห์การรอสาย จากเมนูบริบท ฆ่าบริการ Windows ที่ติดอยู่ในการหยุดหรือเริ่มทำงาน
  3. ในหน้าต่างใหม่ คุณมักจะเห็นว่ากระบวนการของคุณกำลังรอกระบวนการอื่น สิ้นสุดกระบวนการ หากคุณกำลังรอ svchost.exe หรือกระบวนการอื่นๆ ของระบบ คุณไม่จำเป็นต้องยุติมัน ลองวิเคราะห์ห่วงโซ่การรอสำหรับกระบวนการนี้ ค้นหา PID ของกระบวนการที่ svchost.exe ของคุณกำลังรอและฆ่ามัน

การฆ่าบริการที่หยุดทำงานโดยใช้ Process Explorer

แม้แต่ผู้ดูแลระบบในพื้นที่ก็ไม่สามารถยุติกระบวนการบางอย่างที่ทำงานภายใต้บัญชี SYSTEM ได้ ความจริงก็คือบัญชีผู้ดูแลระบบไม่มีสิทธิ์ในกระบวนการหรือบริการบางอย่าง ในการหยุดกระบวนการดังกล่าว (บริการ) คุณต้องให้สิทธิ์แก่บริการ (กระบวนการ) แก่กลุ่มผู้ดูแลระบบในพื้นที่แล้วฆ่า ในการดำเนินการนี้ เราจะต้องมีเครื่องมือขนาดเล็กสองอย่าง:psexec.exe และ ProcessExplorer (มีอยู่ในเว็บไซต์ของ Microsoft)

  1. ในการเริ่ม ProcessExplorer ด้วยสิทธิ์ของระบบ (runas SYSTEM) ให้ใช้คำสั่ง: PSExec -s -i ProcExp.exe
  2. ในรายการกระบวนการ Process Explorer ให้ค้นหากระบวนการบริการที่ค้างและเปิดคุณสมบัติ
  3. ไปที่ บริการ ค้นหาบริการของคุณแล้วคลิก การอนุญาต ปุ่ม; ฆ่าบริการ Windows ที่ติดอยู่ในการหยุดหรือเริ่มทำงาน
  4. ให้สิทธิ์การควบคุมทั้งหมดในการอนุญาตบริการสำหรับ ผู้ดูแลระบบ กลุ่ม. บันทึกการเปลี่ยนแปลง; ฆ่าบริการ Windows ที่ติดอยู่ในการหยุดหรือเริ่มทำงาน
  5. ตอนนี้ให้พยายามหยุดกระบวนการบริการ โปรดทราบว่าการอนุญาตในบริการจะได้รับชั่วคราวจนกว่าจะมีการเริ่มต้นใหม่ หากต้องการให้สิทธิ์อย่างถาวรในบริการ ให้ทำตามบทความ ตั้งค่าการอนุญาตบนบริการ Windows