Unix 正确终止生成的runghc进程

Unix 正确终止生成的runghc进程,unix,haskell,spawn,Unix,Haskell,Spawn,用这样的脚本 -- foo.hs import System.Process import Control.Concurrent main = do a <- runCommand "yes" threadDelay 1000000 terminateProcess a …然后bar.hs将永远运行。有没有更好的方法让runghc终止 编辑: 这种行为在linux上这是非常有趣的行为。发生的事情是,runghc产生了它自己的子进程,您杀死了runghc进程,但没有杀死

用这样的脚本

-- foo.hs
import System.Process
import Control.Concurrent

main = do
   a <- runCommand "yes"
   threadDelay 1000000
   terminateProcess a
…然后bar.hs将永远运行。有没有更好的方法让runghc终止

编辑:
这种行为在linux上

这是非常有趣的行为。发生的事情是,
runghc
产生了它自己的子进程,您杀死了
runghc
进程,但没有杀死子进程。使用Inplace代替
terminateProcess
似乎在这里起到了作用,尽管我真的不知道这是否是一个可靠/正确的解决方案。

这种行为相当令人惊讶,IMHO。这可能被视为GHC运行时的一个bug,特别是因为子进程不是由Haskell程序员显式生成的,而是由运行时生成的,因此它看起来很难重写。@chi好吧,我肯定不是运行时,而是选择生成进程的
runghc
。但我同意你的结论,
runghc
选择这样做有点令人惊讶。我怀疑这只是实现它的简单方法:我打赌我们基本上看到了
ghci
沙箱,即使没有需要沙箱的封闭流程。我在
interruptProcessGroupOf
方面取得了混合成功,但它比我所知道的任何其他东西都好。谢谢
import Control.Monad
import Control.Concurrent

main = forever (print 5 >> threadDelay 100000)