จะหยุดกระบวนการแบ็ตบน Windows ได้อย่างไร?


11

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

UPDATE1

ดูเหมือนจะเป็นการยากที่จะหยุดกระบวนการ BAT ที่ทำงานอยู่ในแบ็คกราวน์และฉันตัดสินใจที่จะพยายามฆ่าทุกกระบวนการที่เกี่ยวข้องกับไฟล์ BAT ตามชื่อซึ่งอาจเกินความจำเป็นฉันยอมรับได้เนื่องจากกระบวนการส่วนใหญ่ในไฟล์ BAT ของฉันไม่ได้ใช้บ่อย เช่น ping, tracert, netstat ฯลฯ หากคุณมีทางออกที่ดีกว่าโปรดแจ้งให้เราทราบขอบคุณ

UPDATE2

ต้นไม้กระบวนการค้างคาว

ข้อความแสดงแทน


1
คุณทำให้ไฟล์ bat ทำงานในพื้นหลังได้อย่างไร? คุณบอกว่าคุณไม่สามารถทำ ctrl-c ฉันจะลอง break = on หากไม่ได้ผล แต่คุณบอกว่าคุณไม่สามารถทำ ctrl-c เพราะมันเป็น "ในพื้นหลัง" บางทีมันอาจจะวิ่งไปแล้วเสร็จแล้วและคุณต้องฆ่าสิ่งที่เกิดขึ้น
barlop

2
@ barlop สามารถแสดงเป็น backgroud ShellExecute(NULL,"open","some.bat",NULL,NULL,SW_HIDE);ใน VC ++
SpawnST

คำตอบ:


11

กระบวนการมักจะเปิดตัวในทรีเช่นแฟชั่นผมขอแนะนำให้เปิดตัวMicrosoft / Sysinternals Process Explorerเริ่มต้นด้วยการคลิกที่Show Process Treeตัวเลือก (1) จากนั้นค้นหากระบวนการของคุณและคลิกขวาแล้วเลือกKill Process Tree(2) สิ่งนี้น่าจะฆ่าทั้งไฟล์ต้นฉบับและ ทุกอย่างที่มันเปิดตัว

ข้อความแสดงแทน


การสังหารทรีกระบวนการดูเหมือนว่าจะหนักหนาสาหัสเล็กน้อย อาจเพียงพอที่จะฆ่ากระบวนการพาเรนต์ (คำสั่ง bat)
wag2639

1
@ wag2639 หลังจากอ่านคำถามฉันคิดว่าเขาต้องการที่จะจบการทำงานของ BAT และวางกระบวนการ? เมื่อมีการกล่าวว่าต้องใช้เวลานานในการประมวลผลฉันเข้าใจว่าเมื่อกระบวนการเปิดตัวแล้วไม่มีอะไรเกิดขึ้นจนกว่าพวกเขาจะเขียนคำตอบ ... ถ้าต้นไม้ไม่จบก็จะมีกระบวนการทำงานที่เป็นพวง ไม่ได้ทำอะไร.
William Hilsum

ฉันลองวิธีนี้และเพิ่มรูปภาพในคำตอบของฉันขอบคุณและตอนนี้ฉันพบคำสั่งที่สามารถฆ่ากระบวนการที่เริ่มต้นด้วยไฟล์ BAT และลูก ๆ ของมันtaskkill /F /T /IM cmd.exeปัญหาเดียวคือทุกไฟล์ BAT จะเริ่มcmd.exeกระบวนการด้วย PID ที่แตกต่างกัน . ฉันต้องคิดว่าอันไหนคือเป้าหมายของฉัน
วางไข่

@SpawnST กระบวนการอะไรที่เปิดไฟล์ BAT? คุณต้องฆ่าไอเท็มที่เปิดใช้แล้วถ้ามีหลายชุด
William Hilsum

@ วิลมันเริ่มต้นด้วยกระบวนการ MFC / Dialog กล่องโต้ตอบเรียกใช้ไฟล์ BAT ที่มีเปลือกหน้าต่างเมื่อเริ่มต้นแล้วตอนนี้ฉันกำลังพยายามที่จะทำให้แน่ใจว่ากระบวนการ BAT นั้นได้รับการสร้างขึ้นอย่างสมบูรณ์เมื่อไดอะล็อกออก
SpawnST

5

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

นี่คือไฟล์แบตช์สาธิต:

echo xx > "c:\temp\lockfile"
pause
if not exist "c:\temp\lockfile" goto  exit
pause
del "c:\temp\lockfile"
:exit

หากต้องการฆ่ากระบวนการที่อาจดำเนินการอย่างรุนแรงในขณะนี้คุณสามารถสร้างไฟล์ชุด 'ฆ่า' ที่จะมีคำสั่งtaskkillสำหรับงานทั้งหมดที่อาจเปิดตัวจากชุดไฟล์:

del "c:\temp\lockfile"
taskkill /im mytask1.exe
taskkill /im mytask2.exe

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

ใช่นั่นคือสิ่งที่ฉันกำลังทำอยู่ตอนนี้มีความรุนแรงจริงๆ :-) และบางทีไฟล์ล็อคไม่จำเป็นในการแก้ปัญหานี้
SpawnST

มีความจำเป็นดังนั้นแบตช์ไฟล์จะไม่ทำงานต่อไปเมื่อไฟล์ปัจจุบันถูกยกเลิก ไม่เช่นนั้นอาจเกิดขึ้นได้ว่า task1 ถูกยกเลิกและ task2 เริ่มต้นหลังจาก taskkill เสร็จสิ้นดังนั้นชุดการทำลายจะพลาดเพียงแค่ task2
harrymc

1

BAT มักจะเปิดตัวอินสแตนซ์ของ CMD.exe ขึ้นอยู่กับสิ่งที่สคริปต์ของคุณทำก็จะเริ่มกระบวนการอื่น ๆ


ดังนั้นมีวิธีใดบ้างที่สามารถหยุดกระบวนการนี้โดยเริ่มต้นกระบวนการอื่นได้
วางไข่

1
@SpawnST: หากมองเห็นหน้าต่าง CMD คุณไม่สามารถพิมพ์ CTRL + C ได้หรือไม่
Paradroid

@ jason404 ตามที่ฉันพูดถึงในคำถามมันทำงานในพื้นหลัง
วางไข่

1

ฉันเขียนแอพที่อาจช่วยคุณได้อย่างน้อยถ้า BAT กำลังทำงานในหน้าต่าง CMD คุณสามารถดูหน้าต่างแอปพลิเคชั่นที่ทำงานอยู่และรับ PID ของแอพจากนั้นคุณสามารถฆ่ามันด้วยแอพของฉันคุณยังสามารถดูกระบวนการทั้งหมดที่วางไข่และฆ่าพวกมันได้ด้วย มันเป็นโปรแกรมที่ใช้งานง่าย แต่มีประสิทธิภาพสำหรับสิ่งเหล่านี้ คุณยังสามารถใช้มันเพื่อติดตามว่าไฟล์ BAT กำลังทำงานจากที่ใดบน HD ในกรณีที่คุณไม่ทราบมาก่อน


ฉันกำลังทำงานนี้กับ VC ++ / MFC และฉันคิดว่าฉันต้องการคำสั่ง windows บางคำสั่งเพื่อทำสิ่งนั้นขอบคุณสำหรับการตอบกลับ
วางไข่

1

ไฟล์แบตช์มีการเรียกใช้อย่างไร
หากมาจาก Task Scheduler คุณสามารถหยุดได้จากที่นั่นเช่นกัน หากมาจากบริการคุณสามารถหยุดบริการได้



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