.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.