Error in close.connection(p) : ignoring SIGPIPE signal

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Error in close.connection(p) : ignoring SIGPIPE signal

Benjamin Tyner
Not sure if this is a bug, so posting here first. If I run:

    cnt <- 0L
    while (TRUE) {
        cnt <- cnt + 1L
        p <- pipe("echo /dev/stdin > /dev/null", open = "w")
        writeLines("foobar", p)
        tryCatch(close(p), error = function(e) { print(cnt); stop(e)})
    }

then once cnt gets to around 650, it fails with:

    [1] 654
    Error in close.connection(p) : ignoring SIGPIPE signal

Should I not be using pipe() in this way? Here is my sessionInfo()

    R version 3.6.0 (2019-04-26)
    Platform: x86_64-pc-linux-gnu (64-bit)
    Running under: Ubuntu 18.04.3 LTS

    Matrix products: default
    BLAS:   /home/btyner/R360/lib64/R/lib/libRblas.so
    LAPACK: /home/btyner/R360/lib64/R/lib/libRlapack.so

    locale:
     [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
     [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
     [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
     [7] LC_PAPER=en_US.UTF-8       LC_NAME=C
     [9] LC_ADDRESS=C               LC_TELEPHONE=C
    [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

    attached base packages:
    [1] stats     graphics  grDevices utils     datasets  methods base

    loaded via a namespace (and not attached):
    [1] compiler_3.6.0

Regards,
Ben

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Error in close.connection(p) : ignoring SIGPIPE signal

Andreas Kersting
Hi Benjamin,

you cannot pipe to echo, since it does not read from stdin.

echo just echos is first arg, i.e. echo /dev/stdin > /dev/null will echo the string "/dev/stdin"to /dev/stdout, which is redirected to /dev/null.

Try

p <- pipe("cat > /dev/null", open = "w")

instead.

Regards,
Andreas

2019-12-06 02:46 GMT+01:00 Benjamin Tyner<[hidden email]>:

> Not sure if this is a bug, so posting here first. If I run:
>    cnt <- 0L
>    while (TRUE) {
>        cnt <- cnt + 1L
>        p <- pipe("echo /dev/stdin > /dev/null", open = "w")
>        writeLines("foobar", p)
>        tryCatch(close(p), error = function(e) { print(cnt); stop(e)})
>    }
>
> then once cnt gets to around 650, it fails with:
>
>    [1] 654
>    Error in close.connection(p) : ignoring SIGPIPE signal
>
> Should I not be using pipe() in this way? Here is my sessionInfo()
>
>    R version 3.6.0 (2019-04-26)
>    Platform: x86_64-pc-linux-gnu (64-bit)
>    Running under: Ubuntu 18.04.3 LTS
>
>    Matrix products: default
>    BLAS:   /home/btyner/R360/lib64/R/lib/libRblas.so
>    LAPACK: /home/btyner/R360/lib64/R/lib/libRlapack.so
>
>    locale:
>     [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
>     [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
>     [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
>     [7] LC_PAPER=en_US.UTF-8       LC_NAME=C
>     [9] LC_ADDRESS=C               LC_TELEPHONE=C
>    [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
>
>    attached base packages:
>    [1] stats     graphics  grDevices utils     datasets  methods base
>
>    loaded via a namespace (and not attached):
>    [1] compiler_3.6.0
>
> Regards,
> Ben
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Error in close.connection(p) : ignoring SIGPIPE signal

Benjamin Tyner
Andreas,

How right you are! Still, I find it curious that in the context of the
while(TRUE) loop, I am allowed to do this 653 times, with failure on the
654th attempt. Perhaps there is something asynchronous going on? If I
eliminate the looping, it does indeed fail (as expected) on the first
attempt to close the pipe.

Regards

Ben

On 12/6/19 2:04 AM, Andreas Kersting wrote:

> Hi Benjamin,
>
> you cannot pipe to echo, since it does not read from stdin.
>
> echo just echos is first arg, i.e. echo /dev/stdin > /dev/null will echo the string "/dev/stdin"to /dev/stdout, which is redirected to /dev/null.
>
> Try
>
> p <- pipe("cat > /dev/null", open = "w")
>
> instead.
>
> Regards,
> Andreas
>
> 2019-12-06 02:46 GMT+01:00 Benjamin Tyner<[hidden email]>:
>> Not sure if this is a bug, so posting here first. If I run:
>>     cnt <- 0L
>>     while (TRUE) {
>>         cnt <- cnt + 1L
>>         p <- pipe("echo /dev/stdin > /dev/null", open = "w")
>>         writeLines("foobar", p)
>>         tryCatch(close(p), error = function(e) { print(cnt); stop(e)})
>>     }
>>
>> then once cnt gets to around 650, it fails with:
>>
>>     [1] 654
>>     Error in close.connection(p) : ignoring SIGPIPE signal
>>
>> Should I not be using pipe() in this way? Here is my sessionInfo()
>>
>>     R version 3.6.0 (2019-04-26)
>>     Platform: x86_64-pc-linux-gnu (64-bit)
>>     Running under: Ubuntu 18.04.3 LTS
>>
>>     Matrix products: default
>>     BLAS:   /home/btyner/R360/lib64/R/lib/libRblas.so
>>     LAPACK: /home/btyner/R360/lib64/R/lib/libRlapack.so
>>
>>     locale:
>>      [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
>>      [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
>>      [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
>>      [7] LC_PAPER=en_US.UTF-8       LC_NAME=C
>>      [9] LC_ADDRESS=C               LC_TELEPHONE=C
>>     [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
>>
>>     attached base packages:
>>     [1] stats     graphics  grDevices utils     datasets  methods base
>>
>>     loaded via a namespace (and not attached):
>>     [1] compiler_3.6.0
>>
>> Regards,
>> Ben
>>
>> ______________________________________________
>> [hidden email] mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Error in close.connection(p) : ignoring SIGPIPE signal

R devel mailing list
You may be running out of file descriptors because the pipe objects are not
getting garbage collected often enough.  Adding the line
   if (cnt %% 100 == 0) { cat(cnt, "\n"); gc() }
to your loop  lets it continue indefinitely.

Bill Dunlap
TIBCO Software
wdunlap tibco.com


On Fri, Dec 6, 2019 at 4:29 AM Benjamin Tyner <[hidden email]> wrote:

> Andreas,
>
> How right you are! Still, I find it curious that in the context of the
> while(TRUE) loop, I am allowed to do this 653 times, with failure on the
> 654th attempt. Perhaps there is something asynchronous going on? If I
> eliminate the looping, it does indeed fail (as expected) on the first
> attempt to close the pipe.
>
> Regards
>
> Ben
>
> On 12/6/19 2:04 AM, Andreas Kersting wrote:
> > Hi Benjamin,
> >
> > you cannot pipe to echo, since it does not read from stdin.
> >
> > echo just echos is first arg, i.e. echo /dev/stdin > /dev/null will echo
> the string "/dev/stdin"to /dev/stdout, which is redirected to /dev/null.
> >
> > Try
> >
> > p <- pipe("cat > /dev/null", open = "w")
> >
> > instead.
> >
> > Regards,
> > Andreas
> >
> > 2019-12-06 02:46 GMT+01:00 Benjamin Tyner<[hidden email]>:
> >> Not sure if this is a bug, so posting here first. If I run:
> >>     cnt <- 0L
> >>     while (TRUE) {
> >>         cnt <- cnt + 1L
> >>         p <- pipe("echo /dev/stdin > /dev/null", open = "w")
> >>         writeLines("foobar", p)
> >>         tryCatch(close(p), error = function(e) { print(cnt); stop(e)})
> >>     }
> >>
> >> then once cnt gets to around 650, it fails with:
> >>
> >>     [1] 654
> >>     Error in close.connection(p) : ignoring SIGPIPE signal
> >>
> >> Should I not be using pipe() in this way? Here is my sessionInfo()
> >>
> >>     R version 3.6.0 (2019-04-26)
> >>     Platform: x86_64-pc-linux-gnu (64-bit)
> >>     Running under: Ubuntu 18.04.3 LTS
> >>
> >>     Matrix products: default
> >>     BLAS:   /home/btyner/R360/lib64/R/lib/libRblas.so
> >>     LAPACK: /home/btyner/R360/lib64/R/lib/libRlapack.so
> >>
> >>     locale:
> >>      [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
> >>      [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
> >>      [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
> >>      [7] LC_PAPER=en_US.UTF-8       LC_NAME=C
> >>      [9] LC_ADDRESS=C               LC_TELEPHONE=C
> >>     [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
> >>
> >>     attached base packages:
> >>     [1] stats     graphics  grDevices utils     datasets  methods base
> >>
> >>     loaded via a namespace (and not attached):
> >>     [1] compiler_3.6.0
> >>
> >> Regards,
> >> Ben
> >>
> >> ______________________________________________
> >> [hidden email] mailing list
> >> https://stat.ethz.ch/mailman/listinfo/r-devel
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel