프로세스 B를 시작하는 프로세스 A가 있습니다.
이들은 WCF (IAsyncResult APM 패턴)로 통신하며, A는 클라이언트 B 서비스입니다. 프로세스 A가 죽었을 때
, 난 내가 B 처리하는 과정을 인수 같은 ID를 보내고 B.가장 좋은 방법은 호스팅 된 프로세스를 닫습니다.
을 닫아야합니다 그는 않습니다 :이 제대로 작동
Process.GetProcessById(processId).WaitForExit();
.
제 질문은 프로세스가 죽으면 프로세스 b를 죽이는 방법입니다.
나는 시도 모두 다음 일
Process.GetCurrentProcess().Close();
Process.GetCurrentProcess().Dispose();
Application.Exit(); > its a guiless winform application
유일한 것은이었다
Process.GetCurrentProcess().Kill();
을하지만 과정을 죽이는 밤은 너무 잔인?
코드를 추가 :
프로세스 B를 주요 내부 :
TrackExternalProcess(externalProcessId,() => { OnExternalProcessClosed(); });
공공 방법 :
public static void TrackExternalProcess(int processId, Action onExternalProcessClosed)
{
new Thread(new ThreadStart(delegate
{
try
{
Thread.CurrentThread.IsBackground = true;
Process.GetProcessById(processId).WaitForExit();
logger.Error("Host process quit unexpectedly");
onExternalProcessClosed();
}
catch (Exception)
{
}
})).Start();
}
public static void OnExternalProcessClosed()
{
Process.GetCurrentProcess().Kill();
}
B에서 아무 것도 시도하지 않고 무엇인가하지 않으면 어떻게됩니까? 대신 Application.Start();를 실행하면 A가 종료되면 종료됩니다. – PhonicUK
Application.Start()가 없습니다. – ilansch
Kill()을 사용하는 것은 좋으며 너무 잔인하지 않아도됩니다. 프로세스 A에 대한 이벤트 핸들러를 작성하여 닫히거나 중단 될 때를 알 수 있습니다. http://msdn.microsoft.com/en-us/library/system.diagnostics.process.exited(v=vs.90).aspx – PmanAce