ฉันจะรู้ได้อย่างไรว่ากระบวนการ“ explorer.exe” นั้นเป็นกระบวนการหลักอย่างไร


13

ฉันมีไฟล์แบตช์ที่เปลี่ยนไฟล์รีจิสตรีไม่กี่ไฟล์จากนั้นรีสตาร์ท explorer.exe เพื่อให้มีผล ฉันกำลังใช้คำสั่ง

taskkill /f /im explorer.exe
explorer.exe

แน่นอนว่านี่เป็นการฆ่ากระบวนการ explorer.exe ทั้งหมดรวมถึง windows explorer ที่ฉันเปิดอยู่ (เห็นได้ชัดว่าฉันใช้ตัวเลือกในการLaunch folder windows in a separate process.)

มีวิธีใดบ้างที่ฉันสามารถกำหนดอินสแตนซ์ของ explorer.exe ที่เป็นตัวหลักและฆ่าได้หรือไม่


การฆ่า explorer.exe หลักอาจเป็นเพียงการฆ่าคนอื่น ๆ ทั้งหมดเพราะพวกเขาขึ้นอยู่กับว่ามันจะทำงาน
cutrightjm

1
@ekaj มันไม่ได้ ฉันสามารถทำได้ด้วยตนเอง แต่ละหน้าต่างเป็นกระบวนการอิสระ
ฮอด - กองทัพของโมนิก้า

ฉันสนใจที่จะหาวิธีที่เชื่อถือได้เพื่อกำหนดexplorer.exeอินสแตนซ์หลัก (ที่เกี่ยวข้องกับเดสก์ท็อป) เช่นกัน แต่ด้วยเหตุผลตรงข้าม ฉันพบว่ามันน่ารำคาญที่explorer.exeโพรเซสที่เกิดกลับไม่ได้ออกเสมอเมื่อปิดหน้าต่างที่เกี่ยวข้องทั้งหมด ฉันใช้ตัวจัดการงานเพื่อฆ่าพวกเขาและมักจะพึ่งพาข้อเท็จจริงที่ว่าอินสแตนซ์ที่เกิดมามักจะถูกกำหนดเป็นลำดับความสำคัญสูง (ด้วยเหตุผลบางอย่าง) ใช้งานได้ดี แต่ถ้าฉันตั้งค่าเป็นปกติ (ด้วยเหตุผลที่ชัดเจน) ฉันจะเสี่ยงต่อการฆ่ากระบวนการหลักโดยไม่ตั้งใจ
Synetech

@Synetech taskkill /f /im explorer.exe /fi "windowtitle ne N/A"วิธีการที่เป็น ด้วยเหตุผลบางอย่างคัดลอก / วางที่ลงในพรอมต์คำสั่ง cmd ไม่ทำงาน คุณต้องพิมพ์ด้วยมือ ไม่ได้ลองแบตช์ไฟล์
ฮอด - กองทัพของโมนิก้า

1
คุณแบ่งปัญหาออกเป็นส่วนที่ง่ายและเป็นไปไม่ได้แก้ไขส่วนที่ง่ายและตอนนี้ขอความช่วยเหลือจากส่วนที่เป็นไปไม่ได้ อาจเป็นไปได้ว่าส่วน "ง่าย" ของการแก้ปัญหานั้นไม่ถูกต้อง (เช่นสิ่งที่คุณพยายามทำสามารถทำได้ด้วยนโยบายกลุ่ม) ดังนั้นจะดีถ้าคำถามของคุณรวมถึงปัญหาดั้งเดิมที่คุณพยายามแก้ไข . กระบวนการฆ่าที่ไม่ได้เป็นของคุณนั้นไม่ค่อยถูกต้อง
Simon Richter

คำตอบ:


9

วิธีการใช้ชื่อหน้าต่าง

@ techie007 ปัญหาการฆ่าที่มีชื่อหน้าต่างexplorer.exeN/A

คำสั่ง

for /f "tokens=2,10" %%p in ('tasklist /nh /v /fi "imagename eq explorer.exe"') do if "%%q"=="N/A" taskkill /f /pid %%p

มันทำงานอย่างไร

  • tasklist /nh /v /fi "imagename eq explorer.exe"verbosely explorer.exeแสดงรายการกระบวนการทั้งหมดที่มีชื่อภาพ

  • for /f "tokens=2,10" %%p in ('COMMAND1') do COMMAND2

    COMMAND1รัน สำหรับแต่ละบรรทัดของการส่งออกจะกำหนดตัวแปร%%pและ%%qการที่สองและสิบ "เข็ม" (คั่นด้วยช่องว่าง) COMMAND2และดำเนินการ

    ในกรณีของtaskkill /v, %%p ในขณะนี้ถือ PID และ%%q(ที่จุดเริ่มต้นของ) ชื่อหน้าต่าง

  • if "%%q"=="N/A" taskkill /f /pid %%pN/Aตรวจสอบว่าชื่อหน้าต่าง

    taskkillถ้าเป็นเช่นนั้นจะสิ้นสุดกระบวนการที่มี

วิธีการใช้หน่วยความจำ

@Syntech ชี้ให้เห็นว่าสิ่งนี้ไม่น่าเชื่อถือสำหรับ Windows Explorer แต่ในโปรแกรมกระบวนการหลักมีการใช้หน่วยความจำสูงสุดเสมอ

คำสั่ง

for /f "tokens=2" %%p in ('tasklist /nh /fi "imagename eq explorer.exe" ^| sort /+65') do @set explorerpid=%%p
taskkill /f /pid %explorerpid%

มันทำงานอย่างไร

  • tasklist /nh /fi "imagename eq explorer.exe"explorer.exeแสดงรายการกระบวนการทั้งหมดที่มีชื่อภาพ

  • sort /+65 เรียงลำดับเอาต์พุตก่อนหน้านี้ที่เริ่มต้นด้วยอักขระ 65th (โดยที่การใช้ mem เริ่มต้น)

  • for /f "tokens=2" %%p in ('COMMAND') do @set explorerpid=%%pตั้งค่าexplorerpidเป็นtokens=2อินพุตที่สอง ( ) - คั่นด้วยช่องว่าง - ของแต่ละบรรทัดของเอาต์พุตCOMMANDซึ่งเป็น PID ที่สอดคล้องกัน

  • เนื่องจากtasklistouput ของเรียงลำดับแล้วให้explorerpidถือ PID ที่อ้างสิทธิ์และtaskkillยุติกระบวนการ


ขอขอบคุณ! แต่ด้วยเหตุผลบางอย่างมันก็ยังใช้งานไม่ได้สำหรับฉัน ฉันกำลังทำงานเพื่อดูว่าฉันสามารถแก้ไขได้เพื่อให้มันทำงานได้หรือไม่
ฮอด - กองทัพของโมนิก้า

1
@Dennis, > เพื่อตั้งค่า explorerpid ให้เป็น PID ของ explorer.exe ด้วยการใช้งานหน่วยความจำสูงสุด นั่นควรเป็นวิธีที่น่าเชื่อถือที่สุดในการกำหนดกระบวนการหลัก ไม่ไม่ถูกต้อง เปิดกระบวนการหน้าต่างใหม่ (เช่นผ่านทางลัด) และนำทางไปยังโฟลเดอร์ที่มีรูปภาพจำนวนมากและดูในโหมดภาพย่อ กระบวนการใหม่จะแซงกระบวนการเดิมในการใช้หน่วยความจำอย่างรวดเร็ว > คุณไม่ได้พูดถึงว่าคุณไม่ได้ใช้การกำหนดค่าเริ่มต้น คำถามคือฉันจะทราบได้อย่างไรว่ากระบวนการ "explorer.exe" เป็นกระบวนการหลักหรือไม่ คุณคิดว่าเป็นปัญหาอีกไหม?
Synetech

ทั้งวิธีการแบบหน้าต่างและวิธีการหน่วยความจำขณะนี้ทำงาน ฉันคิดว่าฉันจะไปกับหน้าต่าง - ดูเหมือนน่าเชื่อถือมากขึ้น ขอบคุณมาก ๆ!
ฮอด - กองทัพของโมนิก้า

3

บางทีคุณสามารถบอกให้ Explorer แสดงพา ธ ในแถบหัวเรื่องแล้วใช้WINDOWTITLEตัวกรองเพื่อฆ่ามันตามนั้นหรือไม่

  • เปิด Explorer
  • กด Alt
  • คลิกที่ "เครื่องมือ (รายการเมนู)"
  • คลิกที่ "ตัวเลือกโฟลเดอร์ ... (รายการเมนู)"
  • คลิกที่ "ดู (แท็บหน้า)" ใน "ตัวเลือกโฟลเดอร์"
  • คลิกเพื่อเลือก "แสดงเส้นทางแบบเต็มในแถบหัวเรื่อง (ชุดรูปแบบคลาสสิคเท่านั้น)" ใน "ตัวเลือกโฟลเดอร์"
  • คลิกที่ "สมัคร" -> "ตกลง"

เส้นทางจะไม่แสดงในแถบหัวเรื่องของ Explorer ด้วยชุดรูปแบบ 'ที่ไม่ใช่แบบคลาสสิค' แต่จะอยู่ที่นั่น (ตอนนี้); มันมองไม่เห็น

taskkill /F /FI "WINDOWTITLE eq C:\PathToThing\RunningInExplorer\ToRestart*"

คุณอาจต้องเปลี่ยนเป็นธีมคลาสสิกเป็นการชั่วคราวเพื่อกำหนดว่าพา ธ / ชื่อสำหรับอินสแตนซ์ Explorer ที่คุณต้องการรีสตาร์ท

ไม่ใช่คนโง่เขลา 100% แต่หน้าต่าง Explorer ใด ๆ ที่ไม่มีเส้นทาง (บางส่วน) ในชื่อเรื่องจะปลอดภัยอย่างน้อย :)

แก้ไข:

เนื่องจากคุณต้องการคว้าชื่อ "N / A" คุณอาจต้องใช้แบตช์ไฟล์เพื่อให้คุณสามารถโทเค็นผลลัพธ์ของ TASKLIST และใช้ผลลัพธ์โทเค็นเหล่านั้นเพื่อใช้ TASKKIL เพื่อฆ่าโดย PID

ฉันพบคำตอบสำหรับ StackOverflow.com ที่พูดถึงเรื่องนี้:

จากคำถามTaskkill กระบวนการไม่มีชื่อ? คือคำตอบนี้ซึ่งรวมถึงไฟล์ชุดตัวอย่างนี้:

@echo off
SETLOCAL enabledelayedexpansion
for /f "tokens=*" %%a in ('TASKLIST /V') do (
  set s=%%a
  set p=!s:~27,5!
  set t=!s:~152,3!
  if '!t!'=='N/A' ECHO TASKKILL /PID !p! /T
)

คุณจะต้องการเปลี่ยนคำสั่ง 'TASKLIST / V' ให้เจาะจงยิ่งขึ้นสำหรับ Explorer.exe และเช่นนั้น แต่ควรให้จุดเริ่มต้นที่ดี


กระบวนการที่ฉันต้องการฆ่าเป็นกระบวนการหลัก tasklist /fi "imagename eq explorer.exe" /v /fo listบอกฉันว่า windowtitle ของมันคือ "N / A" น่าเสียดาย `` windowtitle eq N / A "ไม่ทำงาน ความคิดใด ๆ
ฮอด - กองทัพของโมนิก้า

Ahhhhhh gotcha ฉันพบคำตอบสำหรับเรื่องนี้ใน StackOverflow ฉันจะอัปเดตคำตอบด้วยบิตที่เกี่ยวข้องที่นี่พร้อมลิงก์
Ƭᴇcʜιᴇ007

ฉันยังไม่เห็นว่ามันจะทำงานอย่างไร จะทำอย่างไรถ้าไม่มี Windows Explorer ที่เปิดอยู่นอกเหนือจากเดสก์ท็อป
Synetech

1

ฆ่ากระบวนการด้วย PID ที่ต่ำที่สุด (ID กระบวนการ) มันจะได้รับการเริ่มต้นครั้งแรกในขณะที่กระบวนการได้รับหมายเลขตามลำดับ


+1 สิ่งนี้จะใช้ได้เป็นครั้งแรกที่มีการเรียกใช้ไฟล์แบตช์ แต่เนื่องจาก explorer.exe เริ่มต้นใหม่กระบวนการ "หลัก" ใหม่จะมี PID ที่สูงขึ้น มีวิธีอื่นอีกไหม?
ฮอด - กองทัพของโมนิก้า

นี่เป็นเรื่องจริง อย่างไรก็ตามคุณสามารถส่งออกtasklist | find /f "explorer"และถามแล้วเพียงแค่ถาม (กับผู้ใช้ป้อน) PID ต่ำสุดที่จะฆ่าคืออะไร
Mythrillic

@HodofHod: วิธีที่น่าเชื่อถือที่สุดคือการเลือกกระบวนการที่มีการใช้หน่วยความจำสูงสุด หากคุณสามารถใช้ MinGW ( sed, awkฯลฯ ) นั่นเป็นเรื่องง่ายที่จะทำโดยอัตโนมัติ หากไม่ป้อนข้อมูลผู้ใช้อาจเป็นตัวเลือกที่ดีที่สุด
Dennis

@ Adam543i, > ฆ่ากระบวนการด้วย PID ที่ต่ำที่สุด (ID กระบวนการ) มันจะได้รับการเริ่มต้นครั้งแรกในขณะที่กระบวนการได้รับหมายเลขตามลำดับ Windows รุ่นใดที่คุณกำลังพูดถึง สิ่งนี้ไม่เป็นความจริง นอกเหนือจากฟังก์ชั่นความปลอดภัย PID แบบสุ่มฉันจำบางอย่างเกี่ยวกับ OldNewThing เกี่ยวกับ PID ที่ได้รับมอบหมายในช่วงเวลา (สี่หรือ 16 หรือบางอย่าง) ความจริงก็คือการใช้ PID (แม้แต่ญาติ) ก็ไม่น่าเชื่อถือเกินไป
Synetech

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