어떤 "explorer.exe"프로세스가 주요 프로세스인지 어떻게 알 수 있습니까?


13

일부 레지스트리 파일을 변경하는 배치 파일이 있는데 explorer.exe를 다시 시작하여 적용하십시오. 나는 명령을 사용하고 있습니다

taskkill /f /im explorer.exe
explorer.exe

물론 이것은 모두를 죽입니다 내가 열어 놓은 탐색기 창을 포함하여 explorer.exe 프로세스를 종료합니다. (분명히 옵션을 사용하고 있습니다 Launch folder windows in a separate process.)

explorer.exe의 어떤 인스턴스가 주요 인스턴스인지 결정할 수있는 방법이 있습니까?


기본 explorer.exe를 종료하면 실행에 의존하기 때문에 다른 모든 것을 죽일 것입니다.
cutrightjm

1
@ekaj하지 않습니다. 수동으로 할 수 있습니다. 각 창은 독립적 인 프로세스입니다.
Hod-Monica 's Army 1

기본 (데스크톱과 연결된) explorer.exe인스턴스 를 결정하는 안정적인 방법을 찾는 데 관심이 있지만 그 반대의 이유가 있습니다. 생성 된 explorer.exe프로세스가 관련 창을 모두 닫을 때 항상 종료되는 것은 아닙니다. 나는 작업 관리자를 사용하여 그들을 죽이고 생성 된 인스턴스가 보통 어떤 이유로 높은 우선 순위로 설정되어 있다는 사실에 의존하는 경향이 있습니다. 이것은 잘 작동하지만 (정확한 이유로) 정상으로 설정하면 실수로 기본 프로세스를 죽일 위험이 있습니다.
Synetech

@Synetech 그것의 해결책은 taskkill /f /im explorer.exe /fi "windowtitle ne N/A"입니다. 어떤 이유로 cmd 프롬프트에 복사 / 붙여 넣기가 작동하지 않습니다. 직접 입력해야합니다. 배치 파일을 시도하지 않았습니다.
Hod-Monica 's Army 4

1
문제를 쉽고 불가능한 부분으로 나누고 쉬운 부분을 해결했으며 이제 불가능한 부분에 대한 도움을 요청하고 있습니다. 솔루션의 "쉬운"부분이 정확하지 않을 가능성이 높습니다 (예 : 그룹 정책으로 수행하려는 작업). 질문에 해결하려는 원래 문제가 포함되어 있으면 좋을 것입니다. . 자신에게 속하지 않는 프로세스를 죽이는 일은 거의 없습니다.
Simon Richter

답변:


9

창 제목 기반 접근

@ techie007는explorer.exe 창 제목으로 죽이기를 제안 했습니다.N/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"이미지 이름이있는 모든 프로세스를 자세하게 나열합니다 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 %%p 창 제목이 있는지 확인 N/A .

    그렇다면로 프로세스를 종료합니다 taskkill.

메모리 사용 기반 접근법

@Syntech 지적 Windows 탐색기에서는 이것이 신뢰할 수 없다고 했지만 프로그램에서 주 프로세스는 항상 메모리 사용량이 가장 높습니다.

명령

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"image name의 모든 프로세스를 나열합니다 explorer.exe.

  • sort /+65 65 번째 문자로 시작하는 이전 출력을 정렬합니다 (mem 사용이 시작되는 위치).

  • for /f "tokens=2" %%p in ('COMMAND') do @set explorerpid=%%p의 출력에서 ​​각 행의 explorerpid두 번째 ( tokens=2) 입력 ( 공백으로 구분)을 설정 합니다 ( COMMAND해당 PID).

  • 이후 tasklist의 OUPUT 정렬 된, explorerpid청구 된 PID를 보유하고, taskkill처리를 종료한다.


감사합니다! 그러나 어떤 이유로 든 이것이 아직 효과가 없습니다. 어떻게 든 작동하도록 수정할 수 있는지 확인하려고 노력하고 있습니다.
Hod-Monica 's Army 2

1
@Dennis, >는 메모리 사용량이 가장 높은 explorerpid를 explorer.exe의 PID로 설정합니다. 이것이 주요 프로세스를 결정하는 가장 신뢰할 수있는 방법이어야합니다. 아뇨. 새 창 프로세스 (예 : 바로 가기를 통해)를 열고 사진이 많은 폴더로 이동하여 축소판 그림 모드로 봅니다. 새로운 프로세스는 메모리 사용에서 원래 프로세스를 빠르게 능가합니다. > 기본 구성을 사용하지 않는다고 언급하지 않았습니다. 문제는 어떤 "explorer.exe"프로세스가 주요 프로세스인지 어떻게 알 수 있습니까? 그게 또 다른 문제라고 생각합니까?
Synetech

창 접근 방식과 메모리 접근 방식이 모두 작동합니다. 나는 창문을 가지고 갈 것이라고 생각한다-더 신뢰할만한 것. 매우 감사합니다!
Hod-Monica 's Army

3

제목 표시 줄에 경로를 표시하도록 Explorer에 지시 한 다음 WINDOWTITLE필터를 사용하여 해당 경로를 기반으로 종료 할 수 있습니까?

  • 탐색기 열기
  • 프레스 Alt
  • "도구 (메뉴 항목)"를 클릭하십시오
  • "폴더 옵션 ... (메뉴 항목)"을 클릭하십시오.
  • "폴더 옵션"에서 "보기 (페이지 탭)"를 클릭하십시오.
  • "폴더 옵션"에서 "제목 표시 줄에 전체 경로 표시 (클래식 테마 만)"를 클릭하여 선택하십시오.
  • "적용"-> "확인"을 클릭하십시오

경로는 '비 클래식'테마와 함께 탐색기의 제목 표시 줄에 표시되지 않지만 (현재) 있습니다. 보이지 않습니다.

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

다시 시작하려는 Explorer 인스턴스의 경로 / 제목을 결정하기 위해 일시적으로 클래식 테마로 전환해야 할 수도 있습니다.

100 % 완전하지는 않지만 제목에 해당 경로가없는 탐색기 창은 적어도 안전합니다. :)

편집하다:

제목이 "N / A"인 파일을 가져 오려면 TASKLIST의 결과를 토큰화할 수 있도록 배치 파일을 사용해야 할 수도 있습니다. TANKKIL을 사용하여 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창 제목이 "N / A"라고 알려줍니다. 불행히도, ""windowtitle eq N / A "는 작동하지 않습니다. 어떤 아이디어?
Hod-Monica 's Army 2

아아 잡았다. StackOverflow에서 그에 대한 답변을 찾았습니다. 링크로 관련 비트로 답변을 업데이트하겠습니다.
Ƭᴇcʜιᴇ007

나는 이것이 어떻게 작동하는지 여전히 알지 못한다. 데스크탑 이외의 열린 탐색기 창이없는 경우 어떻게합니까?
Synetech

1

PID가 가장 낮은 프로세스 (프로세스 ID)를 종료하십시오. 프로세스가 순차적으로 번호가 매겨 짐에 따라 처음 시작되었을 것입니다.


+1 배치 파일이 처음 실행될 때 작동하지만 explorer.exe가 다시 시작되므로 새로운 "기본"프로세스의 PID가 더 높습니다. 다른 방법이 있습니까?
Hod-Monica 's Army 1

사실입니다. 그러나 출력 tasklist | find /f "explorer"하고 요청한 다음 (사용자 입력으로) 죽일 가장 낮은 PID를 물어보십시오.
Mythrillic

@HodofHod : 가장 안정적인 방법은 메모리 사용량이 가장 높은 프로세스를 선택하는 것입니다. MinGW ( sed, awk등)를 사용할 수 있다면 자동으로 수행하기가 쉽습니다. 그렇지 않으면 사용자 입력이 최선의 선택 일 수 있습니다.
Dennis

@ Adam543i, > PID가 가장 낮은 프로세스를 종료하십시오 (프로세스 ID). 프로세스가 순차적으로 번호가 매겨 짐에 따라 처음 시작되었을 것입니다. 어떤 Windows 버전에 대해 이야기하고 있습니까? 이것은 단순히 사실이 아닙니다. 임의의 PID 보안 기능 외에도 OldNewThing에서 PID가 간격 (4 또는 16 또는 그 이상)으로 할당되는 것에 대해 기억합니다. 사실, PID (상대적인 PID)를 사용하는 것은 너무 신뢰할 수 없습니다.
Synetech

@Dennis, > 가장 안정적인 방법은 메모리 사용량이 가장 높은 프로세스를 선택하는 것입니다. 아니. 전혀. 생성 된 프로세스가 더 높은 메모리 사용량을 갖는 것은 매우 쉽습니다.
Synetech
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.