processx error stacks are better now. They have ANSI hyperlinks for function calls to their manual pages, and they also print operators better.
CRAN release: 2022-07-07
CRAN release: 2022-06-17
processx now closes file unneeded file descriptors when redirecting the standard output and error, in the client file.
processx errors now do not have
rlang_traceclasses, because they are actually not compatible with rlang errors and traces.
CRAN release: 2022-06-10
- processx now gives better error messages, and better stack traces.
CRAN release: 2022-03-25
NULLin the result (instead of an empty string), if the standard error was redirected to the standard output. This also fixes an error when interrupting a
run()with a redirected standard error.
CRAN release: 2021-04-30
processx now compiles with custom compilers that enable OpenMP (#297).
processx now avoids a race condition when the working directory is changed right after starting a process, potentially before the sub-process is initialized (#300).
processx now works with non-ASCII path names on non-UTF-8 Unix platforms (#293).
CRAN release: 2021-04-04
- Fix a potential failure when polling curl file descriptors on Windows.
CRAN release: 2021-03-23
You can now append environment variables to the ones set in the current process if you include
"current"in the value of
env = c("current", NEW = "newvalue")(#232).
Sub-processes can now inherit the standard input, output and error from the main R process, by setting the corresponding argument to an empty string. E.g.
run("ls", stdout = "")(#72).
run()can now discard the standard output and error or redirect them to file(s), instead of collecting them.
processx now optionally uses the cli package to color error messages and stack traces, instead of crayon.
CRAN release: 2020-11-30
New options in
pty_optionsto set the initial size of the pseudo terminal.
Reading the standard output or error now does not crash occasionally when a
\ncharacter is at the beginning of the input buffer (#281).
CRAN release: 2020-09-03
CRAN release: 2020-07-05
The supervisor (activated with
supervise = TRUE) does not crash on the Windows Subsystem on Linux (WSL) now (#222).
Fix ABI compatibility for pre and post R 4.0.1 versions. Now CRAN builds (with R 4.0.2 and later 4.0.x) work well on R 4.0.0.
Now processx can run commands on UNC paths specified with forward slashes:
//hostname/...UNC paths with the usual back-slashes were always fine (#249).
CRAN release: 2020-02-09
Error messages are now fully printed after an error. In non-interactive sessions, the stack trace is printed as well.
Further improved error messages. Errors from C code now include the name of the C function, and errors that belong to a process include the system command (#197).
processx does not crash now if the process receives a SIGPIPE signal when trying to write to a pipe, of which the other end has already exited.
processx now to works better with fork clusters from the parallel package. See ‘Mixing processx and the parallel base R package’ in the README file (#236).
processx now does no block SIGCHLD by default in the subprocess, blocking potentially causes zombie sub-subprocesses (#240).
process$wait()method now does not leak file descriptors on Unix when interrupted (#141).
CRAN release: 2019-07-18
run()does not create an
okvariable in the global environment.
CRAN release: 2019-07-03
Processx has now better error messages, in particular, all errors from C code contain the file name and line number, and the system error code and message (where applicable).
Processx now sets the
.Last.errorvariable for every un-caught processx error to the error condition, and also sets
.Last.error.traceto its stack trace.
run()now prints the last 10 lines of the standard error stream on error, if
echo = FALSE, and it also prints the exit status of the process.
run()now includes the standard error in the condition signalled on interrupt.
processnow supports creating pseudo terminals on Unix systems.
conn_create_pipepair()gets new argument to set the pipes as blocking or non-blocking.
processdoes not set the inherited extra connections as blocking, and it also does not close them after starting the subprocess. This is now the responsibility of the user. Note that this is a breaking change.
run()now passes extra
run()now does not error if the process is killed in a callback.
CRAN release: 2019-05-08
- Fix a crash on Windows, when a connection that has a pending read internally is finalized.
CRAN release: 2019-03-10
processcan now redirect the standard error to the standard output, via specifying
stderr = "2>&1". This works both with files and pipes.
run()can now redirect the standard error to the standard output, via the new
$kill_tree()methods get a
close_connection = TRUEargument that closes all pipe connections of the process.
CRAN release: 2018-12-05
- processx does not depend on assertthat now, and the crayon package is now an optional dependency.
CRAN release: 2018-08-16
process$interupt()method to send an interrupt to a process, SIGINT on Unix, CTRL+C on Windows (#127).
process$new()to support passing extra connections to the child process, in addition to the standard streams.
process$new(), an extra connection that can be used to poll the process, even if
stderrare not pipes (#125).
$restart()method, because it was less useful than expected, and hard to maintain (#116).
conn_disable_inheritance()to disable stdio inheritance. It is suggested that child processes call this immediately after starting, so the file handles are not inherited further.
Fixed a signal handler bug on Unix that marked the process as finished, even if it has not (d221aa1f).
Fixed a bug that occasionally caused crashes in
wait(), on Unix (#138).
CRAN release: 2018-05-15
Fix interference with the parallel package, and other packages that redefine the
SIGCHLDsignal handler on Unix. If the processx signal handler is overwritten, we might miss the exit status of some processes (they are set to
Make the debugme package an optional dependency (#74).
processx is now compatible with R 3.1.x.
Fix a race condition on Windows, when creating named pipes for stdout or stderr. The client sometimes didn’t wait for the server, and processx failed with ERROR_PIPE_BUSY (231, All pipe instances are busy).
CRAN release: 2018-05-07
Fix a crash on windows when trying to run a non-existing command (#90)
Fix a race condition in
processxprocess objects no longer use R connection objects, because the R connection API was retroactive made private by R-core
processxuses its own connection class now to manage standard output and error of the process.
The encoding of the standard output and error can be specified now, and
Cloning of process objects is disables now, as it is likely that it causes problems (@wch).
superviseoption to kill child process if R crashes (@wch).
NULLnow, i.e. they are discarded (@wch).
Fix undefined behavior when stdout/stderr was read out after the process was already finalized, on Unix.
run(): Better message on interruption, kill process when interrupted.
Unix: better kill count on unloading the package.
Unix: make wait() work when SIGCHLD is not delivered for some reason.
Unix: close inherited file descriptors more conservatively.
Fix a race condition and several memory leaks on Windows.
Fixes when running under job control that does not allow breaking away from the job, on Windows.
CRAN release: 2017-07-30
This is an unofficial release, created by CRAN, to fix compilation on Solaris.