プロセスBを開始するプロセスAがあります。
これらはWCF(IAsyncResult APMパターン)で通信し、AはクライアントBはサービスです。
プロセスAが停止したら、Bを閉じる必要があります。
プロセスAidをargとしてプロセスbに送信していますが、彼は次のことを行います。
Process.GetProcessById(processId).WaitForExit();
これは正常に機能しています。
私の質問は、プロセスaが停止した場合に、プロセス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();
}