Нужно убить процес через C#

  • Автор темы Автор темы bedl0
  • Дата начала Дата начала

bedl0

Client
Регистрация
07.12.2012
Сообщения
245
Реакции
59
Баллы
28
Собственно возникла задача убить определённый процесс, если потребляемое им количество памяти превысило заданное значение. Помогите как реализовать такое через сниппет на C#. По логике это должно выглядеть примерно так: берем процесс, проверяем сколько им потребляется памяти, если больше значения переменной то убиваем процесс и идем к следующему процессу (их может быть несколько), если все ок то ложимся спать минут на 10 ну или что вроде этого.
 
  • Оценить
Реакции: Sergodjan
Код:
Развернуть Свернуть Копировать
// берем все процессы блокнота
var procs = System.Diagnostics.Process.GetProcessesByName("notepad");
foreach (var proc in procs)
{
    // если потребили больше 10 Мб, то убиваем
    if (proc.WorkingSet > 10000000)
        proc.Kill();
}
 
Спасибо работает, помогает убить потёкший инстанс )
 
  • Оценить
Реакции: Sergodjan
как убить все base.exe? Подскажите плз, в диспетчере заданий хочу в конце каждого круга убивать базы.


322639e7891c0ef320355c0b61f356b9.png
 
как убить все base.exe? Подскажите плз, в диспетчере заданий хочу в конце каждого круга убивать базы.
C#:
Развернуть Свернуть Копировать
var procs = System.Diagnostics.Process.GetProcessesByName("base");
foreach (var proc in procs)
    proc.Kill();
 
C#:
Развернуть Свернуть Копировать
var procs = System.Diagnostics.Process.GetProcessesByName("base");
foreach (var proc in procs)
    proc.Kill();
а можно как то процесс базы текущего шаба (который убивает процессы) убить крайним?
Иначе, если он убьет свой процесс, то остальные не убьет)
 
Всем привет. Подскажите пожалуйста, я запускаю процесс (cmd.exe через батник) и вывожу process.Id:
Код:
Развернуть Свернуть Копировать
var path = project.Variables["path"].Value;
var process = System.Diagnostics.Process.Start(path);
// возвращаем Id запущенного процесса
return process.Id;

Потом cmd.exe запускает другой процесс (python.exe). Подскажите пожалуйста как можно найти ID этого процесса python.exe, чтобы потом я смог закрыть его. Способ по имени python не катит, т.к. будет несколько процессов python, нужно закрыть именно по ID.
 
На одном из форумов нашел код, который ищет всех потомков запущенного процесса. Т.е. по родительскому процессу ProcessID, находится childId. Подскажите пожалуйста как его адаптировать под zenno, в таком виде у меня он не выполняется?
Код:
Развернуть Свернуть Копировать
using System;
using System.Diagnostics;
using System.Management;

namespace ConsoleApplication1
{

    class Program
    {
        static void Main(string[] args)
        {
            var cmdProcess = Process.Start("cmd");
            Console.ReadLine();

            var query = string.Format("SELECT ProcessId FROM Win32_Process WHERE ParentProcessId = {0}", cmdProcess.Id);
            var search = new ManagementObjectSearcher("root\\CIMV2", query);

            foreach (var childResult in search.Get())
            {
                var childId = (uint)childResult["ProcessID"];
                var child = Process.GetProcessById((int)childId);

                Console.WriteLine(child.Id + "\t" + child.MainWindowTitle);
            }
        }
    }
}
 
На одном из форумов нашел код, который ищет всех потомков запущенного процесса. Т.е. по родительскому процессу ProcessID, находится childId. Подскажите пожалуйста как его адаптировать под zenno, в таком виде у меня он не выполняется?
Такой вариант попробуйте
Код:
Развернуть Свернуть Копировать
ZennoPoster.StopTask(Guid.Parse(project.TaskId));
Запускать по Bad end или Good end на ваше усмотрение.
Upd. что-то тему не глянул полностью перед ответом - этот вариант кода применим ко всем потокам одного запущенного шаблона.
 
Такой вариант попробуйте
Код:
Развернуть Свернуть Копировать
ZennoPoster.StopTask(Guid.Parse(project.TaskId));
Запускать по Bad end или Good end на ваше усмотрение.
Upd. что-то тему не глянул полностью перед ответом - этот вариант кода применим ко всем потокам одного запущенного шаблона.

Да, такой вариант не подходит. Это прерывает работу проекта, но процессы не прерываются. У кого-то ещё есть идеи как по известному ProcessID найти childId? Чувствую где-то близко решение, но что-то неправильно видно делаю.
 
А есть рабочий вариант если, процесс работал более 300 сек то его убить. Есть готовое условие?
 
А есть рабочий вариант если, процесс работал более 300 сек то его убить. Есть готовое условие?
C#:
Развернуть Свернуть Копировать
// берем все процесс, я взял для примера вайбер
var procs = System.Diagnostics.Process.GetProcessesByName("viber");
if (procs.Count() == 0)
{
    return "не нашли нужного процесса";
}
else
{
    foreach (var proc in procs)
    {
        DateTime StartTime = proc.StartTime;
        TimeSpan Time_diff = DateTime.Now - StartTime;
        int Time_diff_int = Convert.ToInt32(Time_diff.TotalMinutes); //вернет время работы процесса в минутах
        // ставим проверку времени на 5 минут:
        if (Time_diff_int>5)
        {
            proc.Kill();
            project.SendInfoToLog("убили процесс");
        }
        else
        {
            project.SendInfoToLog("НЕ убили процесс, а то его время работы столько минут: " + Time_diff_int);
        }
    }
}
 
Последнее редактирование:
  • Оценить
Реакции: web3grep, catol и djaga

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)