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: 1.7.9 Missing SIGPIPE?


On 10/4/2011 4:09 PM, Christopher Faylor wrote:
On Tue, Oct 04, 2011 at 04:00:13PM +0200, Marco Atzeri wrote:
On 10/4/2011 3:53 PM, Peter Rosin wrote:
Peter Rosin skrev 2011-09-28 17:26:
Hi!

When I use bash to build pipelines, they sometimes don't finish but
instead some process remains running. Example:

$ tail -f -n 10000 log.txt | grep . | head -n 2

Almost instantly I get the expected two lines of output, but no prompt
back. I have to use ctrl-c. If I don't ctrl-c I can run pstree in
another terminal and see this:

$ pstree
??????????mintty?????????bash?????????tail
    ??????mintty?????????bash?????????pstree

This example is a poor one, as tail simply waits for a new line, when it gets a new line it forwards it to the pipe and promptly receives a SIGPIPE as grep is not there anymore.

I'll get back when I have distilled a better STC. If I can...

Hi Peter, are you referring on something like SIGHUP on PTY closure ?

http://cygwin.com/ml/cygwin/2011-07/msg00295.html
http://pubs.opengroup.org/onlinepubs/9699919799/functions/close.html

Note that this thread contains your assertion that something isn't happening correctly but it isn't clear that your analysis is correct.

But, no, SIGPIPE != SIGHUP and the above example clearly shows a
completely different scenario than what is described in the above
thread.

cgf

Hi Cgf, I know that SIGPIPE != SIGHUP, but Peter mentioned that the example is not really representative of the PIPE problem he found, so eventually he catched the same problem I saw on mc. Of course, it could be a different one.

Referring to the SIGHUP thread
This portion of the standard, if I am not wrong,
it is not currently implemented in cygwin:

"If fildes refers to the master side of a pseudo-terminal, and this is the last close, a SIGHUP signal shall be sent to the controlling process, if any, for which the slave side of the pseudo-terminal is the controlling terminal. It is unspecified whether closing the master side of the pseudo-terminal flushes all queued input and output."

The workaround I implemented in mc was to send the SIGHUP to the subshell, before mc exit, instead on relying on cygwin to do it.

Am I misundestanding the standard ?

Regards
Marco





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