我一直在試圖通過發送一個SIGTERM信號來使一個守護進程停止(就像通常的守護進程一樣)。守護進程獲取一些運行後應該釋放的資源,並且我想使用括號來執行此操作。SIGTERM上的haskells括號
我注意到當程序終止SIGTERM時,括號的清除部分沒有運行。這可以通過這個程序被複制:
main = bracket (return "ending")
(\x -> putStrLn x)
(\_ -> threadDelay 10000000000000)
這個簡單的程序應該(僅僅通過重新調整它爲簡單起見),並且在結束取得的弦打印獲取字符串"ending"
。
當我用ctrl-c中斷程序時,它的行爲與預期相同,並在退出時打印「結束」,但當我用killall -TERM test
(可執行文件命名爲test)將其終止時,它會打印「Beendet」(「已結束」德語),所以括號的最後部分不運行。
這是一個錯誤還是我做錯了什麼?
我使用GHC 7.6.3和我在Linux/GNU的Debian傑西i386的運行(i686的)
看來,GHC對待來自其他異常SIGTERM不同。 [This](http://stackoverflow.com/questions/18430748/killing-a-haskell-binary)問題可能會有用。 – user2407038 2015-03-18 23:21:57