2015-03-18 19 views
6

我一直在試圖通過發送一個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的)

+3

看來,GHC對待來自其他異常SIGTERM不同。 [This](http://stackoverflow.com/questions/18430748/killing-a-haskell-binary)問題可能會有用。 – user2407038 2015-03-18 23:21:57

回答