Если я правильно понимаю ваш вопрос, у вас есть 3 разных процесса, где последние два были созданы предыдущими:
Proc1> Proc2> Proc3
Первое, что я хочу спросить у вас, действительно ли вам нужна такая настройка. Если все находится под вашим контролем, вы должны рассмотреть возможность создания одного процесса, но если по какой-то причине вам действительно нужно это сделать (т.е. вам нужно запустить другие утилиты командной строки), давайте перейдем к ...
Если вы создаете «дочерние» процессы в своем коде, вы можете сохранить ссылку:
Process proc2 = Process.Start("proc2.exe");
и затем закройте процесс:
proc2.CloseMainWindow();
proc2.Close();
Если у вас нет контроля над Proc2, вы можете получить ссылку на Proc3 из Proc1, используя
Process.GetProcessesByName("proc3.exe");
Имейте в виду, что Process.CloseMainWindow () работает только с приложениями, у которых есть окно, но бесполезно для утилит командной строки. Управлять другими сторонними процессами может быть сложно, это действительно зависит от того, как они реализованы, поэтому я не могу быть более конкретным.
После подробностей в комментарии я бы добавил следующее:
если вы запускаете Proc2 из своего собственного кода, у вас может быть ссылка на его объект Process, так что вы можете зарегистрироваться в событии Exited и в этой точке найти и закрыть Proc3:
proc2 = Process.Start("HelpViewer.exe");
proc2.Exited += new EventHandler(proc2_Exited);
proc2.EnableRaisingEvents = true;
void proc2_Exited(object sender, EventArgs e)
{
//Unregister the event and free the object resources
proc2.Exited -= new EventHandler(proc2_Exited);
proc2.Close();
//Search and close the other process(es)
Process[] processes = Process.GetProcessesByName("HelpViewer.exe");
foreach(Process process in processes)
process.CloseMainWindow();
}
Если вы не запускаете Proc2 из своего кода, то нет простого решения.