This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Problem redirecting stderr to pipe in subprocess


On 10/9/2011 4:10 PM, jan.kolar wrote:


Ken Brown-6 wrote:

The attached STC arose from my attempt to understand the problem discussed starting in

http://cygwin.com/ml/cygwin/2011-09/msg00405.html .

I'm starting a new thread because there appears to be a Cygwin problem
having nothing to do with emacs.

The STC creates a pipe and then runs `bash -ic ls' in a subprocess, with
both stdout and stderr sent to the pipe.  The parent process reads from
the pipe and echoes it to the terminal.

On Linux, I first get the error messages (presumably expected)

bash: cannot set terminal process group (-1): Invalid argument
bash: no job control in this shell

followed by the directory listing.  On Cygwin, the bash process produces
no output but is simply stopped, and I have to kill it from another
terminal before the main program will exit.  This happens both with
cygwin-1.7.9 and the latest snapshot.  Here are a few comments:

1. The problem disappears if I don't send bash's stderr to the pipe.

2. The problem also disappears if I replace -ic by -c in the call to
bash, presumably because there's nothing sent to stderr in that case.

3. The problem disappears if I don't use a pipe but just have the bash
subprocess write to the terminal, even if I redirect bash's stderr to
stdout.

Ken



* Does your program work when compiled by gcc-4 (as opposed to gcc-3) ?

--

Because I also spot some problem with it, if gcc-3 is used:

# correct with gcc-4
$ gcc-4 STC.c&&  ./a.exe
ls: cannot access neeeee: No such file or directory
.bashrc*

# custom cygwin1.dll warning with gcc-3 :
$ gcc-3 STC.c&&  ./a.exe
#####   Ooops, first in forkee and it is not dll:init; where=dcrt0.cc
dll_crt0_1()   pozde - je po linked dll::init iwhere=90
ls: cannot access neeeee: No such file or directory
.bashrc*

I think I've have never seen the message (its my debug message); if you
confirm your program makes difference between gcc-3 and gcc-4, I will have
find out what it means.
(Probably it is like unexpected ordering of DLL's or ordering of their
initialization.)

I always use gcc-4. I've just recompiled with gcc-3, and the results are the same.


Ken


-- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]