Can close-ing a pipe trigger a SIGPIPE?

Kostik Belousov kostikbel at gmail.com
Sat Oct 17 17:59:48 UTC 2009


On Sat, Oct 17, 2009 at 01:53:55PM -0400, Mikhail T. wrote:
> Kostik Belousov написав(ла):
> > Take ktrace of both parent and child.
> >   
> I can see the curious piece right here:
> 
> The child exits:
> 
>  92723 tclsh8.5 CALL  exit(0)
> 
> The parent masks SIGPIPE (as part of my workaround):
> 
>  92722 tclsh8.5 CALL  sigaction(SIGPIPE,0x7fffffffa9e0,0)
>  92722 tclsh8.5 RET   sigaction 0
> 
> This 0-size write must be part of the pipe-closing -- descriptors 4 and
> 5 must be the pipe's:
> 
>  92722 tclsh8.5 CALL  write(0x4,0x800e24028,0)
>  92722 tclsh8.5 RET   write -1 errno 32 Broken pipe
>  92722 tclsh8.5 PSIG  SIGPIPE caught handler=0x800f126d0 mask=0x0 code=0x0
>  92722 tclsh8.5 CALL  sigreturn(0x7fffffffa0c0)
>  92722 tclsh8.5 RET   sigreturn JUSTRETURN
>  92722 tclsh8.5 CALL  close(0x5)
>  92722 tclsh8.5 RET   close 0
>  92722 tclsh8.5 CALL  close(0x4)
>  92722 tclsh8.5 RET   close 0
> 
> Why would it write 0 bytes? Is doing so triggering a SIGPIPE now -- but,
> perhaps, didn't use to?

Obviously, I cannot answer the question. This is something that should
be read from source code or asked by authors.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-stable/attachments/20091017/0da6e310/attachment.pgp


More information about the freebsd-stable mailing list