Como posso matar alguns processos ativos pesquisando os nomes de arquivos .exe em C # .NET ou C ++?
Como posso matar alguns processos ativos pesquisando os nomes de arquivos .exe em C # .NET ou C ++?
Respostas:
Resposta rápida:
foreach (var process in Process.GetProcessesByName("whatever"))
{
process.Kill();
}
(deixe de fora .exe do nome do processo)
Contains("Spotify"))
mata todas as instâncias de Spotify
. Eu quero matar uma instância específica de Spotify
.
Minha solução é usar Process.GetProcess () para listar todos os processos.
Ao filtrá-los para conter os processos desejados, posso executar o método Process.Kill () para interrompê-los:
var chromeDriverProcesses = Process.GetProcesses().
Where(pr => pr.ProcessName == "chromedriver"); // without '.exe'
foreach (var process in chromeDriverProcesses)
{
process.Kill();
}
Atualizar:
Caso queira usar a async
abordagem com alguns métodos recentes úteis do C# 8
( Async Enumerables ), verifique isso:
const string processName = "chromedriver"; // without '.exe'
await Process.GetProcesses()
.Where(pr => pr.ProcessName == processName)
.ToAsyncEnumerable()
.ForEachAsync(p => p.Kill());
Nota: o uso de
async
métodos nem sempre significa que o código será executado mais rapidamente, mas pelo menos não desperdiçará o tempo da CPU e impedirá que o encadeamento em primeiro plano seja interrompido durante as operações. De qualquer forma, você precisa pensar sobre a versão que deseja.
Você pode usar Process.GetProcesses()
para obter os processos atualmente em execução e depois Process.Kill()
matar um processo.
Se você possui o ID do processo ( PID
), pode matar esse processo da seguinte maneira:
Process processToKill = Process.GetProcessById(pid);
processToKill.Kill();
Você pode matar uma instância específica do 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");
Resumo : não importa se o nome contém .exe, o processo será encerrado. Você não precisa "excluir .exe do nome do processo", ele funciona 100%.
.Replace(".exe", "")
no topo votou resposta seria fazer isso com o código muito menos complicado e desnecessário