Прошу помощи в составлении сниппета на С#, который будет убивать определенный процесс. Для понимания попытаюсь объяснить что необходимо:
Шаблон будет запускать поочередно несколько cmd.exe процессов с разными параметрами и выводить process.Id запуская сниппет:
Этот снипет будет скачивать стрим трансляции. В какой-то момент мне будет необходимо остановить скачивание, поэтому я убиваю процесс по process.Id:
Но проблема в том что при убивании процесса по process.Id скачивание стрима продолжается. Дело в то, что выводимый process.Id это ID процесса cmd.exe, но он запускает приложение для скачивания streamlink.exe и процесс python.exe. Загрузка стрима завершается только при снятии задачи в диспетчере задач. А также при закрытии процесса python.exe.
Т.е. задача состоит в том, чтобы снять задачу или убить процесс python.exe, при этом загрузка стрима будет останавливаться. Убить необходимо не все, а определенные python.exe, поэтому способ по имени ("python") не подойдет (т.к. убьет все процессы python) т.е. все загрузки убьются. Т.е. сниппет должен по известному process.Id от cmd найти дочерние ID streamlink.exe и python.exe и убить их по этому id. Есть у кого-то идеи как это реализовать или может другой путь подскажете?
Шаблон будет запускать поочередно несколько cmd.exe процессов с разными параметрами и выводить process.Id запуская сниппет:
Код:
string fileName = @"C:\Program Files (x86)\Streamlink\cmd.exe"; // путь к файлу или имя exe'шника (напр, cmd.exe)
string arguments = @"cmd.exe /k streamlink ..."; // параметры запуска
bool windowStyle = false; // true - не показывать окно процесса, false - показывать окно процесса
bool getProcessId = true; // true - получить ID процесса, false - не получать ID процесса
bool waitForExit = false; // true - ждать завершения работы, false - не ждать завершения работы
int timeOut = 10000; // таймаут выполнения, в миллисек
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.FileName = fileName;
process.StartInfo.Arguments = arguments;
if (windowStyle)
process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
else
process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;
process.Start();
if (getProcessId)
return process.Id; // получаем ID процесса (создать переменную проекта processId)
if (waitForExit)
process.WaitForExit(timeOut);
Код:
1. int processId = int.Parse(project.Variables["processId"].Value);
2. System.Diagnostics.Process.GetProcessById(processId).Kill();
Т.е. задача состоит в том, чтобы снять задачу или убить процесс python.exe, при этом загрузка стрима будет останавливаться. Убить необходимо не все, а определенные python.exe, поэтому способ по имени ("python") не подойдет (т.к. убьет все процессы python) т.е. все загрузки убьются. Т.е. сниппет должен по известному process.Id от cmd найти дочерние ID streamlink.exe и python.exe и убить их по этому id. Есть у кого-то идеи как это реализовать или может другой путь подскажете?