用像这样的脚本

-- 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上

最佳答案

这是非常有趣的行为。发生的是runghc产生了自己的子进程,您杀死了runghc进程,但没有杀死该子进程。使用 interruptProcessGroupOf 代替terminateProcess似乎可以解决问题,尽管我并不太了解这是否是可靠/正确的解决方案。

关于unix - 正确终止生成的Runghc进程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23658676/

10-14 06:55