正确终止衍生的梯级进程

时间:2014-05-14 15:14:29

标签: unix haskell spawn

使用像

这样的脚本
-- 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上

1 个答案:

答案 0 :(得分:5)

这是非常有趣的行为。发生的事情是runghc产生了自己的子进程,你杀了runghc进程而不是子进程。使用interruptProcessGroupOf代替terminateProcess似乎可以解决这个问题,但我真的不知道这是否是一个可靠/正确的解决方案。