Con uno script comecorrettamente Terminare ha generato runghc processo
-- foo.hs
import System.Process
import Control.Concurrent
main = do
a <- runCommand "yes"
threadDelay 1000000
terminateProcess a
ottengo comportamento previsto - yes
piste fino a quando il threadDelay
è in alto. Ma se sostituisco "yes"
con "runghc bar.hs"
, dove bar.hs è
import Control.Monad
import Control.Concurrent
main = forever (print 5 >> threadDelay 100000)
... poi bar.hs corre sempre. C'è un modo migliore per far terminare il runghc?
Edit: Questo comportamento è in linux
Questo comportamento è piuttosto sorprendente, IMHO. Potrebbe essere considerato un bug del runtime di GHC, soprattutto perché il figlio non è stato generato esplicitamente dal programmatore Haskell, ma dal runtime, quindi sembra difficile sovrascriverlo. – chi
@chi Beh, sono sicuro che non è il runtime, ma piuttosto 'runghc' che sta scegliendo di generare un processo. Ma sono d'accordo con la tua conclusione che è un po 'sorprendente che "runghc" scelga di farlo. Sospetto che questo sia il modo più semplice per implementarlo: scommetto che stiamo essenzialmente vedendo sandboxing di 'ghci', anche se non c'è alcun processo di chiusura che richiede una sandbox. –
Ho avuto un successo misto con '' 'interruptProcessGroupOf''', ma è meglio di qualsiasi altra cosa io sappia. Grazie – amindfv