我有一个由 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/