Как я могу убить некоторые активные процессы, выполнив поиск их имен файлов .exe в С#, .NET или С++?
Убить некоторые процессы по имени файла .exe
Ответы (6)
Быстрый ответ:
foreach (var process in Process.GetProcessesByName("whatever"))
{
process.Kill();
}
(убрать .exe из имени процесса)
Kill
в безопасности, как Environment.Exit(0)
?
- person AgainMe; 28.09.2016
Contains("Spotify"))
убивает все экземпляры Spotify
. Я хочу убить конкретный экземпляр Spotify
.
- person Banee Ishaque K; 13.02.2018
Мое решение состоит в том, чтобы использовать Process.GetProcess()
для перечисления всех процессов.
Отфильтровав их, чтобы они содержали нужные мне процессы, я могу затем запустить Process.Kill()
чтобы остановить их:
var chromeDriverProcesses = Process.GetProcesses().
Where(pr => pr.ProcessName == "chromedriver"); // without '.exe'
foreach (var process in chromeDriverProcesses)
{
process.Kill();
}
Обновление:
Если вы хотите сделать то же самое асинхронно (используя C# 8
Async Enumerables
), проверьте это:
const string processName = "chromedriver"; // without '.exe'
await Process.GetProcesses()
.Where(pr => pr.ProcessName == processName)
.ToAsyncEnumerable()
.ForEachAsync(p => p.Kill());
Примечание: использование методов async
не всегда означает, что код будет работать быстрее.
Основное преимущество этого метода заключается в том, что поток переднего плана будет освобожден во время выполнения операции.
Вы можете использовать Process.GetProcesses()
, чтобы получить текущие запущенные процессы, а затем Process.Kill()
, чтобы завершить процесс.
Если у вас есть идентификатор процесса (PID
), вы можете убить этот процесс следующим образом:
Process processToKill = Process.GetProcessById(pid);
processToKill.Kill();
Вы можете убить конкретный экземпляр 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();
}
public void EndTask(string taskname)
{
string processName = taskname.Replace(".exe", "");
foreach (Process process in Process.GetProcessesByName(processName))
{
process.Kill();
}
}
//EndTask("notepad");
Обзор: независимо от того, содержит ли имя .exe, процесс завершится. Вам не нужно «опускать .exe из имени процесса», это работает на 100%.
.Replace(".exe", "")
в ответе с наибольшим количеством голосов сделал бы это с гораздо менее запутанным и ненужным кодом
- person AndrewK; 13.01.2018