gpt4 book ai didi

c# - 关闭托管进程的最佳方式

转载 作者:行者123 更新时间:2023-11-30 17:54:58 25 4
gpt4 key购买 nike

我有启动进程 B 的进程 A。
他们在 WCF(IAsyncResult APM 模式)中进行通信,A 是客户端 B 是服务。
当进程 A 死亡时,我需要关闭 B。

我将进程 A id 作为 arg 发送给进程 b,他做了:

Process.GetProcessById(processId).WaitForExit();

这工作正常。
我的问题是如果进程 a 死了,如何正确地杀死进程 b?

我尝试了以下所有方法:

Process.GetCurrentProcess().Close();
Process.GetCurrentProcess().Dispose();
Application.Exit(); > its a guiless winform application

唯一有用的是:

Process.GetCurrentProcess().Kill();

但是杀进程是不是太残忍了?

添加代码:
main 中的进程 B:

TrackExternalProcess(externalProcessId, () => { OnExternalProcessClosed(); });

公共(public)方法:

    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();

}

最佳答案

Environment.Exit() 不是更干净吗?

关于c# - 关闭托管进程的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15504686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com