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