繁体   English   中英

SIGTERM上的haskells支架

[英]haskells bracket on SIGTERM

我一直试图通过发送一个SIGTERM信号来制作一个守护进程(就像通常用于守护进程一样)。 守护进程获取了一些应该在运行后释放的资源,我想使用括号来执行此操作。

我注意到当程序以SIGTERM终止时,括号的清理部分不会运行。 这个程序可以复制:

main = bracket (return "ending")
       (\x -> putStrLn x)
       (\_ -> threadDelay 10000000000000)

这个简单的程序应该获取字符串"ending" (为了简单起见,只需重新调整它)并在结束时打印获取的字符串。

当我用ctrl-c中断程序时,它表现得像预期的那样并在退出时打印“结束”,但当我用killall -TERM test (可执行文件命名为test)杀死它时,它打印出“Beendet”(“Ended”in German ),所以支架的最后部分没有运行。

这是一个错误还是我做错了什么?

我正在使用GHC 7.6.3并且我在Linux / GNU上运行Debian jessie i386(i686)

通常,外部信号不会变成异常并传递给程序(例如,在多线程程序中,哪个线程会捕获它们?),而是由RTS直接处理。

如果你想听一个外部信号并对它作出反应,正确的做法是从unix包中调用installHandlerhttpinstallHandler POSIX的Signals.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM