2013-09-12 4 views
6

Каков наилучший способ сделать это? Мне нужно пройти цикл по всем моим машинным процессам и выбрать мой идентификатор процесса или есть способ тестирования?Убить процесс по идентификатору процесса

+1

Что вы подразумеваете под "Best Way". Очень просто получить список активных процессов и простой запрос Linq вытащить нужные вам (либо идентификатором процесса, либо именем процесса), и, наконец, убить счет (!). – Alireza

+0

Google [C# kill process by id] (https://www.google.com/search?q=c%23+kill+process+by+id&oq=c%23+kill+process+by+id&aqs=chrome. .69i57j69i58j69i60.3546j0 & sourceid = chrome & ie = UTF-8), затем прочитайте документацию. – tnw

+0

Google ... Кроме того, что означает идентификатор процесса «MY» ... – Baral

ответ

29

Существует встроенный метод, чтобы получить процесс ID:

Process p = Process.GetProcessById(ID); 

Тогда просто kill его:

p.Kill(); 
+2

Если вам нужно дождаться, когда процесс умрет, вы должны включить 'p.WaitForExit()', а также 'p.Dispose()' для хорошей меры или, еще лучше, обернуть его в блок 'using' – Rotem

1

Вы можете использовать Process.GetProcessById метод.

Возвращает новый компонент процесса, учитывая идентификатор процесса на на локальном компьютере.

Process localById = Process.GetProcessById(1234); 
localById.Kill(); 

Также вы можете получить весь процесс с;

Process [] localAll = Process.GetProcesses(); 
0

Вы можете Kill процесс:

Process.GetProcessByName(string).Kill(); 

Вы также get all processes, и может сделать некоторые определения, которые вы хотите, чтобы убить.

Process[] allProcs = Process.GetProcesses(); 
1

Короткий вопрос заслуживает короткий ответ:

public static void KillById(int processId) { 
    Process process = Process.GetProcessById(processId); 
    if (process != null) 
     process.Kill(); 
    else 
     throw new Exception("The contract of the method is to kill a certain process. That endeavour has failed"); 
} 
10

Поскольку я не могу найти ответ, который обрабатывает его правильно:

bool KillProcessByID(int id, bool waitForExit = false) 
{ 
    using (Process p = Process.GetProcessById(id)) 
    { 
     if (p == null || p.HasExited) return false; 

     p.Kill(); 
     if (waitForExit) 
     { 
      p.WaitForExit(); 
     } 
     return true; 
    } 
} 

некоторых случаях, когда вы, возможно, потребуется подождать для выхода, если вы являетесь установщиком, и вам нужно закрыть другой процесс, чтобы разблокировать некоторые из файлов, которые он использует. В этом случае просто вызов Kill не гарантирует, что Process будет мертв, когда возвращается Kill.

+0

Это похоже, не является testet: должно быть 'Process.GetProcessById (id)' –

+0

@ M.Schena Исправлено, спасибо. – Rotem

+0

Мне нужно было выяснить, что оператор using не будет работать, он выдает исключение. Это должно быть try/catch {} –

Смежные вопросы