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



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.)

JK

-- 
View this message in context: http://old.nabble.com/Problem-redirecting-stderr-to-pipe-in-subprocess-tp32616089p32620821.html
Sent from the Cygwin list mailing list archive at Nabble.com.


--
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]