c# - Windows 上是否有 posix SIGTERM 替代方案? -(控制台应用程序的温和杀戮)

标签 c# .net windows winapi sigterm

我有一个由 GUI 应用程序运行的控制台守护程序。当 GUI 应用程序终止时,我也想停止守护进程。

我怎样才能在 Windows 上以温和的方式做到这一点?

在 Linux 上,我只会使用 SIGTERM 在 Windows 上是否有类似的控制台应用程序机制?

为了提供更多细节,守护程序应用程序是用 python 编写的,gui 是用 C# 和 Windows 窗体编写的。

最佳答案

定义“温柔”:)

我假设在守护程序和 GUI 之间已经存在一个通信机制。只需引入“退出”命令并发送即可。

如果您想要终止守护进程,即使它正在忙于做某事(或被卡住),请使用 TerminateProcess()。

要充分利用两者,您可以发送“退出”,然后在进程句柄上等待一段时间 (WaitForSingleObject())。如果守护进程没有在 5 秒内死亡,则终止它。

如果守护进程的主线程容易出现长时间的繁忙事件,让守护进程启动一个后台线程,该线程除了等待命名事件外什么都不做。要向该线程发出信号,请从 GUI 按名称打开事件,然后引发它。这取决于守护进程在检测到事件时要做什么,但至少它将是一个受控的关闭。

关于c# - Windows 上是否有 posix SIGTERM 替代方案? -(控制台应用程序的温和杀戮),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2007516/

相关文章:

c++ - DLL中静态变量的状态

windows - Closehandle() 不终止进程

C# xUnit 测试监听器

c# - 使用 : Roles. GetUsersInRole 或其他命令查找不属于特定角色的所有用户

c# - 无法设置 session 变量

.net - SignalR 中的多态性

c# - 在 dll 中导出并从 C# 加载的 C++ 函数

.net - 在标记中复制粘贴与 2010 年相比性能较差

c# - 检查属性是否可以延迟加载/是否可用而无需捕获异常

java - 当 Java 更新到 OpenJDK 11 时,Windows 上的 Jenkins 返回不受支持的 JVM 错误