Description Usage Arguments Format Details Value Termination
In Linux, the usual combination of fork()
and exec()
is used to spawn a new child process. Standard streams are redirected
over regular unnamed pipe
s.
In Windows a new process is spawned with CreateProcess()
and
streams are redirected over unnamed pipes obtained with
CreatePipe()
. However, because non-blocking (overlapped
in Windows-speak) read/write is not supported for unnamed pipes,
two reader threads are created for each new child process. These
threads never touch memory allocated by R and thus they will not
interfere with R interpreter's memory management (garbage collection).
is_process_handle()
verifies that an object is a
valid process handle as returned by spawn_process()
.
TERMINATION_GROUP
: process_terminate(handle)
and process_kill(handle)
deliver the signal to the child
process pointed to by handle
and all of its descendants.
TERMINATION_CHILD_ONLY
:
process_terminate(handle)
and process_kill(handle)
deliver the signal only to the child process pointed to by
handle
but to none of its descendants.
1 2 3 4 5 6 7 8 9 10 11 | spawn_process(command, arguments = character(), environment = character(),
workdir = "", termination_mode = TERMINATION_GROUP)
## S3 method for class 'process_handle'
print(x, ...)
is_process_handle(x)
TERMINATION_GROUP
TERMINATION_CHILD_ONLY
|
command |
Path to the executable. |
arguments |
Optional arguments for the program. |
environment |
Optional environment. |
workdir |
Optional new working directory. |
termination_mode |
Either |
x |
Object to be printed or tested. |
... |
Other parameters passed to the |
TERMINATION_GROUP
and TERMINATION_CHILD_ONLY
are single character
values.
command
is always prepended to arguments
so that the
child process can correcty recognize the name of its executable
via its argv
vector. This is done automatically by
spawn_process
.
environment
can be passed as a character
vector whose
elements take the form "NAME=VALUE"
, a named character
vector or a named list
.
workdir
is the path to the directory where the new process is
ought to be started. NULL
and ""
mean that working
directory is inherited from the parent.
spawn_process()
returns an object of the
process handle class.
The termination_mode
specifies what should happen when
process_terminate()
or process_kill()
is called on a
subprocess. If it is set to TERMINATION_GROUP
, then the
termination signal is sent to the parent and all its descendants
(sub-processes). If termination mode is set to
TERMINATION_CHILD_ONLY
, only the child process spawned
directly from the R session receives the signal.
In Windows this is implemented with the job API, namely
CreateJobObject()
, AssignProcessToJobObject()
and
TerminateJobObject()
. In Linux, the child calls setsid()
after fork()
but before execve()
, and kill()
is
called with the negate process id.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.