用像这样的脚本
-- 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/