Bagaimana saya bisa tahu proses "explorer.exe" mana yang paling utama?

13

Saya memiliki file batch yang mengubah beberapa file registri, dan kemudian me-restart explorer.exe sehingga mereka berlaku. Saya menggunakan perintah

taskkill /f /im explorer.exe
explorer.exe

Ini tentu saja membunuh semua proses explorer.exe, termasuk windows explorer yang saya buka. (Jelas, saya menggunakan opsi untuk Launch folder windows in a separate process.)

Apakah ada cara saya dapat menentukan contoh explorer.exe mana yang utama, dan bunuh saja?

Hod - Tentara Monica
sumber
Membunuh explorer.exe utama mungkin hanya akan membunuh semua yang lain karena mereka bergantung untuk menjalankannya.
cutrightjm
1
@ekaj Tidak. Saya dapat melakukannya secara manual. Setiap jendela adalah proses independen.
Hod - Tentara Monica
Saya tertarik untuk menemukan cara yang dapat diandalkan untuk menentukan contoh utama (terkait dengan Desktop) explorer.exejuga, tetapi untuk alasan yang berlawanan. Saya merasa menjengkelkan bahwa explorer.exeproses yang muncul tidak selalu keluar ketika semua jendela terkait ditutup. Saya menggunakan Task Manager untuk membunuh mereka, dan cenderung mengandalkan fakta bahwa instance yang muncul biasanya diatur ke prioritas tinggi (untuk beberapa alasan). Ini berfungsi dengan baik, tetapi jika saya telah mengaturnya menjadi normal (untuk alasan yang jelas), maka saya berisiko mematikan proses utama.
Synetech
@ Synetech Solusi untuk itu adalah taskkill /f /im explorer.exe /fi "windowtitle ne N/A". Untuk beberapa alasan, salin / tempel itu ke dalam cmd prompt tidak berfungsi; Anda harus mengetiknya dengan tangan. Tidak mencoba file batch.
Hod - Monica's Army
1
Anda telah membagi masalah menjadi bagian yang mudah dan tidak mungkin, memecahkan bagian yang mudah dan sekarang meminta bantuan dengan bagian yang tidak mungkin. Sangat mungkin bahwa bagian "mudah" dari solusi tidak benar (mis. Apa yang Anda coba lakukan dapat dicapai dengan kebijakan grup), jadi alangkah baiknya jika pertanyaan Anda termasuk masalah awal yang Anda coba selesaikan. . Proses membunuh yang bukan milik Anda jarang benar.
Simon Richter

Jawaban:

9

Pendekatan berbasis judul jendela

@ techie007 menyarankan untuk membunuh explorer.exejudul dengan jendela N/A.

Perintah

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

Bagaimana itu bekerja

  • tasklist /nh /v /fi "imagename eq explorer.exe"secara lisan daftar semua proses dengan nama gambar explorer.exe.

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

    mengeksekusi COMMAND1. Untuk setiap baris output, ia menetapkan variabel %%pdan %%qke "token" kedua dan kesepuluh (dibatasi oleh ruang) dan dijalankan COMMAND2.

    Dalam kasus taskkill /v, %%p sekarang memegang PID dan %%q(awal) judul jendela.

  • if "%%q"=="N/A" taskkill /f /pid %%pmemeriksa apakah judul jendela N/A.

    Jika demikian, itu mengakhiri proses dengan taskkill.

Pendekatan berbasis penggunaan memori

@Syntech menunjukkan bahwa ini tidak dapat diandalkan untuk Windows Explorer, tetapi dalam program, proses utama selalu menggunakan penggunaan memori tertinggi.

Perintah

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

Bagaimana itu bekerja

  • tasklist /nh /fi "imagename eq explorer.exe"daftar semua proses dengan nama gambar explorer.exe.

  • sort /+65 mengurutkan output sebelumnya dimulai dengan karakter ke-65 (di mana penggunaan mem dimulai).

  • for /f "tokens=2" %%p in ('COMMAND') do @set explorerpid=%%pset explorerpidke tokens=2input kedua ( ) - dibatasi oleh spasi - dari setiap baris output COMMAND, yang merupakan PID yang sesuai.

  • Karena tasklistouput telah diurutkan, explorerpidtahan PID yang diklaim, dan taskkillakhiri prosesnya.

Dennis
sumber
Terima kasih! Tetapi untuk beberapa alasan ini belum berhasil untuk saya. Saya sedang bekerja untuk melihat apakah saya dapat memodifikasinya untuk membuatnya berfungsi.
Hod - Tentara Monica
1
@ Dennis, > untuk mengatur explorerpid ke PID dari explorer.exe dengan penggunaan memori tertinggi. Itu harus menjadi cara yang paling dapat diandalkan untuk menentukan proses utama. Tidak benar Buka proses jendela baru (mis., Melalui jalan pintas), dan navigasikan ke folder dengan banyak gambar dan melihatnya dalam mode thumbnail. Proses baru akan dengan cepat menyalip yang asli dalam penggunaan memori. > Yah, Anda tidak menyebutkan bahwa Anda tidak menggunakan konfigurasi default. Pertanyaannya adalah Bagaimana saya bisa tahu proses "explorer.exe" mana yang paling utama? Menurut Anda, bagaimana lagi yang bisa menjadi masalah?
Synetech
Baik pendekatan berjendela dan pendekatan memori sekarang berfungsi. Saya pikir saya akan pergi dengan berjendela - tampaknya lebih dapat diandalkan. Terima kasih banyak!
Hod - Tentara Monica
3

Mungkin Anda bisa memberi tahu Explorer untuk memperlihatkan jalur di bilah judul, lalu gunakan WINDOWTITLEfilter untuk membunuhnya berdasarkan itu?

  • Buka Explorer
  • tekan Alt
  • Klik pada "Alat (item menu)"
  • Klik pada "Opsi folder ... (item menu)"
  • Klik pada "Lihat (tab halaman)" di "Opsi Folder"
  • Klik untuk memilih "Tampilkan path lengkap di bilah judul (hanya tema Classic)" di "Opsi Folder"
  • Klik pada "Terapkan" -> "OK"

Jalur tidak akan ditampilkan di bilah judul Explorer dengan tema 'non-klasik', tetapi ada (sekarang) di sana; itu tidak terlihat.

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

Anda mungkin perlu beralih ke tema klasik sementara untuk menentukan apa jalur / judul untuk instance Explorer yang ingin Anda restart.

Bukan 100% anti-kesalahan, tetapi semua jendela Explorer yang tidak memiliki jalur (sebagian) dalam judul setidaknya akan aman. :)

edit:

Karena Anda ingin mengambil yang dengan judul "N / A", Anda mungkin harus menggunakan file batch sehingga Anda dapat tokenize hasil TASKLIST dan menggunakan hasil token tersebut untuk menggunakan TASKKIL untuk membunuh oleh PID.

Saya menemukan jawaban untuk StackOverflow.com yang membahas ini:

Dari pertanyaan, Tugaskan proses yang tidak berjudul? apakah jawaban ini termasuk contoh file batch ini:

@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
)

Anda ingin mengubah perintah 'TASKLIST / V' menjadi lebih spesifik untuk Explorer.exe dan semacamnya, tetapi harus memberi Anda titik awal yang baik.

Ƭᴇcʜιᴇ007
sumber
Proses yang ingin saya bunuh adalah yang utama. tasklist /fi "imagename eq explorer.exe" /v /fo listmemberitahu saya bahwa windowtitle-nya adalah "N / A". Sayangnya, `" windowtitle eq N / A "tidak berfungsi. Ada ide?
Hod - Tentara Monica
Ahhhhhh. kena kau. Saya menemukan jawaban untuk itu di StackOverflow, saya akan memperbarui jawabannya dengan bit yang relevan di sini dengan tautan.
Ƭᴇcʜιᴇ007
Saya masih tidak melihat bagaimana ini akan berhasil. Bagaimana jika tidak ada jendela Explorer terbuka selain desktop?
Synetech
1

Matikan proses dengan PID (ID Proses) terendah. Itu akan dimulai lebih dulu, karena proses diberi nomor secara berurutan.

Mythrillic
sumber
+1 Ini akan berfungsi untuk pertama kalinya file batch dijalankan, tetapi karena explorer.exe dimulai ulang, proses "utama" yang baru akan memiliki PID yang lebih tinggi. Apakah ada cara lain?
Hod - Tentara Monica
Ini benar. Namun Anda bisa menampilkan tasklist | find /f "explorer"dan bertanya lalu bertanya (dengan input pengguna) berapa PID terendah untuk dibunuh.
Mythrillic
@HodofHod: Cara yang paling dapat diandalkan adalah memilih proses dengan penggunaan memori tertinggi. Jika Anda dapat menggunakan MinGW ( sed, awk, dll), yang cukup mudah dilakukan secara otomatis. Jika tidak, input pengguna mungkin merupakan pilihan terbaik.
Dennis
@ Adam543i, > Matikan proses dengan PID (ID Proses) terendah. Itu akan dimulai lebih dulu, karena proses diberi nomor secara berurutan. Versi Windows apa yang sedang Anda bicarakan? Ini tidak benar. Selain fungsi keamanan PID acak, saya ingat sesuatu di OldNewThing tentang PID yang ditugaskan dalam interval (empat atau 16 atau sesuatu). Faktanya adalah, bahwa menggunakan PID (bahkan yang relatif) terlalu tidak dapat diandalkan.
Synetech
@ Dennis, > Cara yang paling dapat diandalkan adalah memilih proses dengan penggunaan memori tertinggi. Nggak. Tidak semuanya. Sangat mudah bagi proses melahirkan untuk memiliki penggunaan memori yang lebih tinggi.
Synetech