file descriptors

Brandon S. Allbery KF8NH allbery at
Thu Oct 30 20:48:48 EDT 2008

On 2008 Oct 30, at 10:08, Johannes Waldmann wrote:
> are there any known issues
> with file handles/descriptors in ghc-compiled executables?
> My program has a lot of calls to System.Process.runInteractiveProcess
> and I'm running into unpredictable behaviour (sometimes the program
> just silently dies, sometimes it gets stuck)

runInteractiveProcess returns 3 filehandles and a process handle.   
Either can cause problems:  if you use too many filehandles, the  
select()-based mechanism in the Haskell runtime will fail (select()  
has a fairly low limit on filehandles as compared to poll(), epoll(),  
and other mechanisms); if you spawn too many subprocesses without  
reaping them (waitForProcess / getProcessExitCode) you will hit the  
child process limit and not be able to create new child processes.

A third problem is that you can deadlock if you write too much data  
without reading any back.  Your best bet is to forkIO so input and  
output are independent.

> Or perhaps you see anything that's wrong with my code here

And there's a fourth problem:  you hGetContents after blocking  
waitForProcess.  If the output is larger than the size of a pipe  
buffer (often 512 bytes), the subprocess will block waiting for the  
pipe to be read, while you're waiting for it to exit before reading  
from the pipe.

brandon s. allbery [solaris,freebsd,perl,pugs,haskell] allbery at
system administrator [openafs,heimdal,too many hats] allbery at
electrical and computer engineering, carnegie mellon university    KF8NH

More information about the Glasgow-haskell-users mailing list