使用像
这样的脚本-- foo.hs
import System.Process
import Control.Concurrent
main = do
a <- runCommand "yes"
threadDelay 1000000
terminateProcess a
我得到了预期的行为 - yes
一直运行到threadDelay
为止。但是,如果我将"yes"
替换为"runghc bar.hs"
,其中bar.hs为
import Control.Monad
import Control.Concurrent
main = forever (print 5 >> threadDelay 100000)
...然后bar.hs永远运行。是否有更好的方法让runghc终止?
编辑: 此行为是在Linux上
答案 0 :(得分:5)
这是非常有趣的行为。发生的事情是runghc
产生了自己的子进程,你杀了runghc
进程而不是子进程。使用interruptProcessGroupOf
代替terminateProcess
似乎可以解决这个问题,但我真的不知道这是否是一个可靠/正确的解决方案。