[Rd] Detect a terminated pipe

Simon Urbanek simon.urbanek at r-project.org
Fri Mar 14 16:12:37 CET 2014

On Mar 14, 2014, at 11:03 AM, Kirill Müller <kirill.mueller at ivt.baug.ethz.ch> wrote:

> On 03/14/2014 03:54 PM, Simon Urbanek wrote:
>> As far as R is concerned, the connection is open. In addition, pipes exist even without the process - you can close one end of a pipe and it will still exist (that’s what makes pipes useful, actually, because you can choose to close arbitrary combination of the R/W ends). Detecting that the other end of the pipe has closed is generally done by sending/receiving data to/from the end of interest - i.e. reading from a pipe that has closed the write end on the other side will yield 0 bytes read. Writing to a pipe that has closed the read end on the other side will yield SIGPIPE error (note that for text connections you have to call flush() to send the buffer):
>>> >p=pipe("true","r")
>>> >readLines(p)
>> character(0)
>>> >close(p)
>>> >p=pipe("true","w")
>>> >writeLines("", p)
>>> >flush(p)
>> Error in flush.connection(p) : ignoring SIGPIPE signal
>>> >close(p)
> Thanks for your reply. I tried this in an R console and received the error, just like you described. Unfortunately, the error is not thrown when trying the same in RStudio. Any ideas?

RStudio is not R, so it’s possible that they catch signals and fail to distinguish their use from R’s eating the signal before R can get it. I would suggest filing a bug report with RStudio.


More information about the R-devel mailing list