考虑这样的事情:
...
handleShutdown :: ThreadId -> IO ()
handleShutdown tid = doSomethingFunny >> throwTo tid ExitSuccess
main = do
...
installHandler sigTERM (Catch $ myThreadId >>= handleShutdown) Nothing
forever $ do
stuff
...
Run Code Online (Sandbox Code Playgroud)
如果sigINT(Ctrl+C) 以这种方式处理,则该过程会很好地完成。但是,似乎sigTERMHaskell 内部正在使用,上面的代码根本没有从主进程中退出。有没有办法在sigTERM不使用MVar自定义循环的情况下从处理程序退出进程?我在任何sigTERM地方都找不到有关处理的任何信息(没有阅读 ghc 来源,这对我来说太多了)。
更新:
以下工作:
main = do
...
tid <- myThreadId -- This moved out of the Catch handler below.
installHandler sigTERM (Catch $ handleShutdown tid) Nothing
forever $ do
stuff
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
523 次 |
| 最近记录: |