Hello,

So, I'm still trying to understand the implications of this change. Suppose 
I spawn "cat" and write to the stdin of the spawned process, then will the 
"cat" process not be able to read it?

var cat = spawn('cat');
cat.stdin.write('Foo Bar');
cat.stdout.on('data', function(d) { console.log("Child Says:", String(d); 
});

Will this do what I expect it to?


On Wednesday, September 19, 2012 6:20:23 PM UTC-4, Ben Noordhuis wrote:
>
> On Wed, Sep 19, 2012 at 9:54 PM, David Glasser 
> <[email protected]<javascript:>> 
> wrote: 
> > See https://gist.github.com/3751746 for details. 
> > 
> > Basically, in Node 0.6, if you start a child_process with 
> > child_process.spawn, the pipe2 system call was used to create the 
> > pipes between parent and child. 
> > 
> > This was changed (I believe) in this commit by indutny: 
> > 
> https://github.com/joyent/libuv/commit/c0081f0e6675131721dbb5138fd398792a8c2163
>  
> > 
> > Now the socketpair call is used to create those fds. 
> > 
> > I'm not sure why that choice was made, but it has at least one bad 
> > effect: it breaks the ability to use "/dev/stdin" or "/proc/self/fd/0" 
> > on the child, at least on Linux. 
> > 
> > The gist shows a Node program that basically just spawns "cat 
> > /proc/self/fd/0", closes the pipe to the cat, and shows what the cat 
> > outputs. In 0.6.17 cat happily cats the empty stdin and exits 1. In 
> > 0.8.8 cat fails to open the /proc/self/fd/0. 
> > 
> > The C program in the gist shows that the difference really is just 
> > socketpair vs pipe2. If you run the version with pipe2 the open call 
> > succeeds. Comment out pipe2 and uncomment socketpair, and the open 
> > call fails. 
> > 
> > Was this behavior change intentional? 
>
> Yes. 
>
> > What benefits are created by switching from pipe2 to socketpair? 
>
> The ability to send file descriptors to the child process (which was 
> something you could do in v0.4 but not v0.6). 
>
> It's been brought up on the issue tracker a few times. A 
> straightforward workaround is to insert a pipe. E.g.: 
>
>   spawn('foo') 
>
> Becomes: 
>
>   spawn('/bin/sh', ['-c', 'cat | foo']) 
>

-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

Reply via email to