【问题标题】:Shutdown as if ctrl+c was entered就像输入了 ctrl+c 一样关机
【发布时间】:2022-11-10 18:35:06
【问题描述】:

我试图比 process.Kill(true), 方法更优雅地关闭一个进程。

我有一个控制台应用程序,我在其中启动另一个进程“myProcess”(这不是我有源代码的应用程序),我希望能够关闭它,就像在控制台中按 ctrl+c 一样。 “myProcess”本质上是以固定的时间间隔对接收者进行 ping 操作。

当我使用 ctrl+c 关闭它时,“myProcess”会正常关闭,向接收器发送“我现在离线”请求。 但是,当我使用 kill(true) 将其关闭时,它不会发送离线请求,并且接收器会停止接收 ping,但不会将其标记为在线。

请注意,我无法控制 myProcess 或接收器的源,因此我无法更改其中的任何行为。

我尝试过使用 waitForExit()、waitForExit(0) 和 kill(),所有这些都只会停止我的调试会话,但 myProcess 会继续运行。

在寻找解决方案时,我遇到了这些方法的答案建议,并使用 GenerateConsoleCtrlEvent 以编程方式发送 ctrl+c 事件。但是我的控制台应用程序无法识别该方法,而且我似乎找不到任何使用它的方法。 我认为,因为答案相当陈旧,它不再是 .NET 6 中的一个选项。

有谁知道,如何优雅地关闭进程,枯萎生成的 chilprocess 或自我进程 Process.GetCurrentProcess() ?

【问题讨论】:

    标签: c# .net console-application .net-6.0


    【解决方案1】:

    看起来需要处理 SIGTERMS 的东西。

    检查this out

    【讨论】:

      【解决方案2】:

      您可以尝试使用CloseMainWindow,阅读文档以查看它是否适合您的用例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-19
        • 2012-05-21
        • 2019-01-23
        相关资源
        最近更新 更多