On 09/09/2010 17:18, Christian Maeder wrote:
David Peixotto schrieb:
On Sep 9, 2010, at 6:37 AM, Simon Marlow wrote:

On 09/09/2010 10:39, Christian Maeder wrote:
Christian Maeder schrieb:
Hi,

we call from our haskell application the metis prover via

  System.Process.readProcessWithExitCode "metis" filename ""

However, we are not able to get rid of this process if metis does not
terminate by itself. In particular, wrapping this call into a
System.Timeout.timeout does not work.
timeout works so far as it is possible to start another action, but the
continuing metis process still blocks the whole system.

C.

Any suggestions how we should handle this ideally portably but first of
all under unix. (ghc-6.12.3)
Take a look at the timeout program in GHC's test suite:

http://darcs.haskell.org/testsuite/timeout/timeout.hs

This looks pretty complicated. Did no one else needed this? Isn't it
easier to put the application into a wrapper script and call the script
from haskell?


It is pretty complicated, because properly wrapping a process in a timeout is a complicated task. You have to:

 - kill not just the process you started, but any children it started

 - catch ^C, and pass it to the child process(es)

 - if the child process died with a signal, arrange that the wrapper
   dies with the same signal, so that the parent can see what happened

 - try to kill nicely, giving them a chance to clean up, but kill
   forcefully if that doesn't work.

It would be a good idea to wrap this up and put it on Hackage, in fact.

Cheers,
        Simon
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to