5
有了一个脚本像正确终止催生runghc过程
-- foo.hs
import System.Process
import Control.Concurrent
main = do
a <- runCommand "yes"
threadDelay 1000000
terminateProcess a
我得到预期的行为 - yes
运行,直到threadDelay
到了。但是,如果我有"runghc bar.hs"
,其中bar.hs更换"yes"
是
import Control.Monad
import Control.Concurrent
main = forever (print 5 >> threadDelay 100000)
...然后bar.hs始终运行。有没有更好的方法让runghc终止?
编辑: 此行为是在Linux上
这种行为是相当令人惊讶,恕我直言。它可以被认为是GHC运行时的一个bug,特别是因为这个孩子没有被Haskell程序员明确地产生,但是在运行时,因此它很难被覆盖。 – chi
@chi嗯,我确定它不是运行时,而是'runghc',它选择产生一个进程。但我同意你的结论,认为'runghc'选择这样做有点令人惊讶。我怀疑这只是实现它的简单方法:我敢打赌,我们基本上看到了'ghci'沙盒,即使没有需要沙箱的封闭进程。 –
我与'''interruptProcessGroupOf'''混合成功,但它比我知道的任何其他东西都好。谢谢 – amindfv