From wdunlap at tibco.com  Tue Jul  2 18:16:52 2013
From: wdunlap at tibco.com (William Dunlap)
Date: Tue, 2 Jul 2013 16:16:52 +0000
Subject: [Rd] Ctrl+C in R will terminate the child process which is
 spawned	by using "pipe"
In-Reply-To: <OF918D6FB5.0BE55AA5-ON48257B9C.005569B6-48257B9C.0056AE15@cn.ibm.com>
References: <OF918D6FB5.0BE55AA5-ON48257B9C.005569B6-48257B9C.0056AE15@cn.ibm.com>
Message-ID: <E66794E69CFDE04D9A70842786030B931C308F30@PA-MBX01.na.tibco.com>

If you are on a Unix-like machine try using the setsid command to
run your command in a 'session' of its own.  E.g.,

  > z <- pipe("setsid /usr/bin/yes", open="r")
  > length(readLines(z, n=1e6))
  [1] 1000000
  > # hit control-C
  > length(readLines(z, n=1e6))
  [1] 1000000
  > length(readLines(z, n=1e6))
  [1] 1000000
  > close(z)

as opposed to

  > z <- pipe("/usr/bin/yes", open="r")
  > length(readLines(z, n=1e6))
  [1] 1000000
  > # hit control-C
  > length(readLines(z, n=1e6)) # this reads what is left in the stdin buffer
  [1] 34240
  > length(readLines(z, n=1e6))
  [1] 0
  > close(z)

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com


> -----Original Message-----
> From: r-devel-bounces at r-project.org [mailto:r-devel-bounces at r-project.org] On Behalf
> Of Rong lI Li
> Sent: Tuesday, July 02, 2013 8:46 AM
> To: r-devel at r-project.org
> Subject: [Rd] Ctrl+C in R will terminate the child process which is spawned by using "pipe"
> 
> 
> Hi, all,
> 
> I pressed Ctrl+C in R process, and found that the child process which was
> spawned by using "pipe" is terminated due to this.
> Are there any way to work around it, so that the child process can run
> happily without being terminated? Or can we block the signal for the child
> process?
> 
> 1. I used pipe to spawn one C++ process, which will running in a loop
> without exiting immediately.
> 
> z <- pipe("./mytest", open = "r+")
> > z
> description       class        mode        text      opened    can read
>  "./mytest"      "pipe"        "r+"      "text"    "opened"       "yes"
>   can write
>        "no"
> 
> 2. When I press "Ctrl+C" in the current R shell, I found the forked child
> process was also terminated. Are there any way to work around it?
> 
> =====================
> 
> Rong "Jessica", Li (????)
> Platform Symphony TET, CSTL, IBM Systems &Technology Group, Development
> Tel:86-10-82451010  Email:ronglli at cn.ibm.com
> 	[[alternative HTML version deleted]]



[Rd] Ctrl+C in R will terminate the child process which is spawned by using "pipe"
William Dunlap