我有进程A启动进程B.
它们在WCF(IAsyncResult APM模式)中通信,A是客户端B是服务
当进程A死亡时,我需要关闭B.
我正在将进程A id作为arg发送到进程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();
}
答案 0 :(得分:1)
Environment.Exit()
不清洁吗?
答案 1 :(得分:0)
没有更清洁的版本,我只是简单地调用我的Dispose方法 它关注所有事情,例如关闭的WCF服务 最后是Process.GetCurrentProcess()。Kill();