.exe 파일 이름으로 일부 프로세스 종료


답변:


241

빠른 답변 :

foreach (var process in Process.GetProcessesByName("whatever"))
{
    process.Kill();
}

(프로세스 이름에서 .exe는 제외)


2
위 코드가 Exception을 반환하면 어떻게해야합니까 (32 비트 프로세스가 64 비트 프로세스의 모듈에 액세스 할 수 없음)?
Manish

40
".exe"는 그대로 둡니다. MSDN에서 : "프로세스 이름은 Outlook과 같이 .exe 확장자 나 경로를 포함하지 않는 친숙한 이름입니다."

1
@AgainMe Process.Kill ()은 프로세스에 킬 (kill) 신호를 보내어 프로세스가 어디에 있든 실행을 중지합니다. 이것은 프로세스가 신호에서 응답 및 / 또는 정리할 기회가 없다는 점에서 인터럽트 신호와 다릅니다. 해당 프로세스에서 더 이상 실행되지 않으며 해당 프로세스에서 사용하는 리소스에 대한 잠금이 해제됩니다. Environment.Exit ()는 현재 실행중인 프로세스에 의해 수행되어 완벽하게 안전한 성공 코드로 스스로를 죽입니다. Process.Kill ()은 Environment.Exit ()만큼 안전하지 않습니다.
jchitel

2
LINQ 사용을 제안합니다. var procs = Process.GetProcesses (). Where (pr => pr.ProcessName.Contains ( "Spotify"));
Leandro

2
프로세스의 특정 인스턴스를 종료하는 옵션이 있습니까? 내 말은, Contains("Spotify"))모든 인스턴스를 죽인다 Spotify. 특정 인스턴스를 죽이고 싶습니다 Spotify.
Banee Ishaque K

38

내 솔루션은 모든 프로세스를 나열 하기 위해 Process.GetProcess () 를 사용 하는 것입니다.
원하는 프로세스를 포함하도록 필터링하면 Process.Kill () 메서드를 실행 하여 중지 할 수 있습니다.

var chromeDriverProcesses = Process.GetProcesses().
    Where(pr => pr.ProcessName == "chromedriver"); // without '.exe'

foreach (var process in chromeDriverProcesses)
{
     process.Kill();
}

최신 정보:

( Async Enumerables ) async의 유용한 최근 방법으로 접근 방식 을 사용하려면 다음을 확인하십시오.C# 8

const string processName = "chromedriver"; // without '.exe'
await Process.GetProcesses()
             .Where(pr => pr.ProcessName == processName)
             .ToAsyncEnumerable()
             .ForEachAsync(p => p.Kill());

참고 : async메서드를 사용 한다고해서 항상 코드가 더 빨리 실행되는 것은 아니지만 적어도 CPU 시간을 낭비하지 않고 작업을 수행하는 동안 포 그라운드 스레드가 중단되는 것을 방지합니다. 어쨌든 원하는 버전을 생각해야합니다.


사용할 수있는 대신 동일한의 포함
레안드로

10
우연의 일치는이 스레드에서 chromedriver를 죽이는 해결책을 찾고 있었다는 것입니다. 일반적인 문제 여야합니다.
kerl

여기도 마찬가지입니다. 그래도 해결되지 않는 것 같습니다. 실행되는 초기 콘솔은 실제로 chrome.exe의 인스턴스이며 빌드 / 테스트 에이전트가 아닌 이상 모든 항목을 강제로 닫고 싶지는 않을 것
같습니다

16

를 사용 Process.GetProcesses()하여 현재 실행중인 프로세스를 가져온 다음 프로세스를 종료 할 수 있습니다 Process.Kill().


6
Process.GetProcessesByName은 이것을 단순화합니다.
ConsultUtah

위 코드가 Exception을 반환하면 어떻게해야합니까 (32 비트 프로세스가 64 비트 프로세스의 모듈에 액세스 할 수 없음)?
Manish

0

프로세스 ID ( PID) 가있는 경우 다음과 같이이 프로세스를 종료 할 수 있습니다.

Process processToKill = Process.GetProcessById(pid);
processToKill.Kill();

0

MS Word의 특정 인스턴스를 죽일 수 있습니다.

foreach (var process in Process.GetProcessesByName("WINWORD"))
{
    // Temp is a document which you need to kill.
    if (process.MainWindowTitle.Contains("Temp")) 
        process.Kill();
}

-2
public void EndTask(string taskname)
{
      string processName = taskname.Replace(".exe", "");

      foreach (Process process in Process.GetProcessesByName(processName))
      {
          process.Kill();
      }
}

//EndTask("notepad");

요약 : 이름에 .exe가 포함되어 있어도 프로세스가 종료됩니다. "프로세스 이름에서 .exe를 제거"할 필요가 없습니다. 100 % 작동합니다.


1
간단한 .Replace(".exe", "")상단에는 대답은 훨씬 덜 뒤얽힌 불필요한 코드로 이런 짓을 했을까 투표
AndrewK

그것의 전체 아이디어는 .... 그것은 복사에 대한 의미 및 붙여 넣기 아니에요 ... 사람들이 그것을 처리하는 여러 가지 방법을 볼 수 있도록로 또는 .exe없이 메서드를 참조하는 것입니다
user7993881
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.