Запускают ли программы, запущенные с Process.Start(exepath);
, при завершении родительского процесса? Я получаю какое-то странное поведение и считаю, что это может быть проблемой.Завершает ли Process.Start дочернюю программу, когда родитель завершает работу?
ответ
Короткий ответ на ваш вопрос: нет, они этого не делают. Вам нужно будет их явно убить. Если вы хотите убить процесс, который вы начали, вы можете использовать дескриптор, возвращенный process.start. Что-то наподобие этого
Process p = Process.Start("someprocess");
if (p != null)
p.Kill();
В случае, когда дочерние процессы Windows обычно живут самостоятельно и после их запуска они не зависят от их родительского процесса. Вы ищете job objects. С помощью заданий вы можете контролировать весь жизненный цикл дерева процессов, все дочерние процессы могут быть детерминистически прекращены, если заканчивается родительский (имея родительское собственное задание, строго говоря, все дочерние процессы завершаются, если задание убито). Для него нет управляемого API .Net, но p-Invoke работает нормально.
Так что, если вы испытываете неожиданное «странное поведение», убедитесь, что ваш процесс не запущен в контексте задания, в результате чего ваши дочерние процессы также будут частью задания. Process Explorer может отображать свойства работы процесса.
Спасибо за подробный ответ, но я думаю, что вы слишком далеко читаете мой вопрос. Я просто хотел знать, будет ли процесс умирать или нет, поскольку проблема, которую я наблюдал, заключалась в том, что дочерний процесс закончится после того, как родитель закончит. Оказалось, что проблема была совсем другая –
@ChristianStewart помните, что случилось с вашей проблемой? Я вижу подобное поведение, но это также странно - если процессы находятся в моей папке dev, он работает нормально. В приложении, упакованном в MSI и установленном, убийство родителя убивает ребенка. С какими шансами вы справлялись? – Dave
@ Давай, к сожалению, я этого не делаю, я больше не использую C# :) Удачи! –