一部のプロセスを.exeファイル名で強制終了する


回答:


241

素早い回答:

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

(プロセス名の.exeは省略します)


2
上記のコードが例外を返した場合はどうすればよいですか(32ビットプロセスが64ビットプロセスのモジュールにアクセスできない)。
マニッシュ2013

40
「.exe」は省略します。MSDNから:「プロセス名は、.exe拡張子またはパスを含まない、Outlookなどのプロセスの

1
@AgainMe Process.Kill()はプロセスにkillシグナルを送信し、プロセスがどこにいてもその実行を停止します。これは、プロセスが応答したり、シグナルからクリーンアップしたりする機会がないという点で、割り込みシグナルとは異なります。そのプロセスではこれ以上の実行は行われず、そのプロセスで使用されているリソースのロックは解放されます。Environment.Exit()は、現在実行中のプロセスによって実行され、完全に安全な成功コードで自身を強制終了します。Process.Kill()は、Environment.Exit()ほど安全ではありません。
jchitel 2017

2
LINQの使用をお勧めします。var procs = Process.GetProcesses()。Where(pr => pr.ProcessName.Contains( "Spotify"));
Leandro

2
プロセスの特定のインスタンスを強制終了するオプションはありますか?Contains("Spotify"))つまりSpotify 、のすべてのインスタンスを殺しますの特定のインスタンスを強制終了したいSpotify
Banee Ishaque K 2018

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時間を浪費せず、操作の実行中にフォアグラウンドスレッドがハングするのを防ぎます。いずれの場合も、どのバージョンが必要かを考える必要があります。


あなたは等しいの代わりにContainsを使うことができます
Leandro

10
おかしな偶然ですが、私はこのスレッドでchromedriverを強制終了するための解決策を探していました。一般的な問題でなければなりません。
kerl 2017

こっちも一緒。それでも解決しないようです。実際にchrome.exeのインスタンスであると私はあなたが近く、そのすべてのビルド/テストエージェント場合を除き、これらのを強制したくない推測しているオフトリガーされます初期コンソール
ダンCsharpster

16

を使用Process.GetProcesses()して、現在実行中のプロセスを取得してProcess.Kill()から、プロセスを強制終了できます。


6
Process.GetProcessesByNameはこれを簡素化します。
ConsultUtah 2010

上記のコードが例外を返した場合はどうすればよいですか(32ビットプロセスが64ビットプロセスのモジュールにアクセスできない)。
マニッシュ2013

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.