Hi Johannes:

I had a similar question a few years back using the async library and in particular the 'race' function. I got a nice answer on StackOverflow:

    https://stackoverflow.com/questions/24446154/control-concurrent-async-race-and-runinteractiveprocess

I think you can use the ideas in there. Bottom line: You can use a combination of 'onException' and 'terminateProcess' and let your spawned processes clean-up after themselves properly.

Cheers,

-Levent.

On Tue, Jul 24, 2018 at 6:42 AM, Johannes Waldmann <johannes.waldmann@htwk-leipzig.de> wrote:
Dear Cafe,

I am using
https://hackage.haskell.org/package/process-1.6.4.0/docs/System-Process.html#v:readProcess
to start an external command, and wait for its completion.

Now I would like to time-out this after a while.
I can use
https://hackage.haskell.org/package/base-4.11.1.0/docs/System-Timeout.html
and this works in simple cases -

but not in case the external command has spawned child processes.
(cleanupProcess sends SIGTERM but only to the process at the top of
the tree ?)

I guess I need to use
https://hackage.haskell.org/package/unix-2.7.2.2/docs/System-Posix-Process.html
but that seems rather low-level - and I don't see how I would
get the ProcessID of the process started by  readProcess,
so I'd also have to re-do that.

Is there an abstraction/library that would help here?

Thanks - J.W.
_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.