我在 gchi 中运行了一个服务器服务器和另一个后台线程(通过async
)。当我在GHCi提示符上按Ctrl+c
时,服务方服务器正常关闭,但我的后台线程仍在运行。只退出整个GHCi会话似乎真的终止了它。
两个问题:
答案 0 :(得分:2)
这种行为只是因为我在GHCi吗?如果我编译了一个二进制文件,运行它,然后按下Ctrl + C就可以了,后台线程是否仍会继续运行?
在已编译的二进制文件中,如果^ C导致main
线程结束,则进程将结束,并且所有线程也将(突然)结束为副作用。 ^ C不会导致main
线程结束;请参阅下面的信号处理讨论。
如何妥善解决这个问题?
可能你可以捕获UserInterrupt
异常以注意^ C被命中并关闭你在异常处理程序中生成的任何线程。
我说“可能”因为^ C处理有点复杂,并且servant安装了自定义处理程序是可行的。在这种情况下,您可能需要通过unix
包查看signal handling。 (不知道Windows系统的等价物。)