[erlang-questions] spawn problem

Fernando Ipar fipar@REDACTED
Tue Mar 27 15:42:13 CEST 2007

That was it!

I increased the number of open files with ulimit and it worked.

I don't know how I didn't realize it needed two fds open for each process :)

Thanks for the help,


ok wrote:
> 508 is suspiciously close to 512, which is half of 1024.
> Doesn't it look to you as though os:cmd/1 is opening TWO files?
> Looking in lib/kernel/src/os.erl,
> 	cmd/1 -> unix_cmd/1 -> spawns unix_cmd/1 -> creates a port using  
> start_port/0
> 	-> open_port({spawn,"sh -s unix:cmd  2>&1"}, [stream])
> 	The command is then sent to the STANDARD INPUT of that new process
> 	and the STANDARD OUTPUT of the process read and returned to the  
> original caller.
> It would be a little clearer if the documentation for  
> erlang:open_port/2 said explicitly
> that open_port({spawn,...},[...]) used up two file descriptors, but  
> this text:
> 	use_stdio
> 	    This is only valid for {spawn, Command}.
> 	    It allows the standard input and output (file descriptors 0 and 1)
> 	    of the spawned (UNIX) process for communication with Erlang.
> does give you a strong hint.
> Why does os:cmd/1 send the command to the shell's standard input,
> 	sh -s unix:cmd <"your command string"  ,
> rather than
> 	sh -c "your command string" </dev/null ?
> Not being the author, I can't say for sure, but there is an upper  
> bound on the size of a
> command in the second case which does not apply in the first (if the  
> Command is passed as
> a string, because atoms have their own limits).

More information about the erlang-questions mailing list