[Haskell-cafe] haskell and releasing resources
Donald Bruce Stewart
dons at cse.unsw.edu.au
Tue Feb 6 08:58:50 EST 2007
fmohamed:
> I am just coming to haskell, and I wrote a simple command to get some
> input from a pdf file
>
> I just wanted the output of the command so I did something like
>
> import System.Process (runInteractiveCommand)
> import IO (hGetContents)
>
> -- | returns the text of the first page of the pdf at the given path,
> needs pdftotext
> getTextOfPdf :: String -> IO String
> getTextOfPdf pdfPath = do
> (inp,out,err,pid) <- runInteractiveCommand ("pdftotext -l 1 "+
> +pdfPath++" -")
> return (hGetContents out)
>
> I don't care about error handling, if something goes wrong it is ok
> to hang or crash, but knowing unix I wondered if this would do the
> right thing or if it would create a zombi process.
>
> I was about to ask, but then I thought "let's test it", and sure
> enough the zombi stays there.
> I tried to even to allocate more than one, wait, I even managed to
> exhaust the resources of my machine...
>
> So here is what I would have liked to happen: when the pid gets
> garbage collected it tries to wait for the process, and if that fails
> the pid stays around longer and will try to wait later.
Wait for the process to terminate, using
waitForProcess pid
I've a sketch for a nice wrapper for the low level process code here,
http://www.cse.unsw.edu.au/~dons/code/newpopen/
Cheers,
Don
More information about the Haskell-Cafe
mailing list