2025-01-12 04:36:52 +08:00

339 lines
12 KiB
Markdown

# processx 3.8.5
* No changes.
# processx 3.8.4
* No changes.
# processx 3.8.3
* `*printf()` format strings are now safer (#379).
# processx 3.8.2
* The client library, used by callr, now ignores `SIGPIPE` when writing
to a file descriptor, on unix. This avoid possible freezes when a
`callr::r_session` subprocess is trying to report its result after the
main process was terminated. In particular, this happened with parallel
testthat: https://github.com/r-lib/testthat/issues/1819
# processx 3.8.1
* On Unixes, R processes created by callr now feature a `SIGTERM`
cleanup handler that cleans up the temporary directory before
shutting down. To enable it, set the `PROCESSX_R_SIGTERM_CLEANUP`
envvar to a non-empty value.
# processx 3.8.0
* processx error stacks are better now. They have ANSI hyperlinks for
function calls to their manual pages, and they also print operators
better.
* processx now does not mark standard streams as close-on-exec on Unix,
as this causes problems when calling `system()` from an R subprocess
(https://github.com/r-lib/callr/issues/236).
# processx 3.7.0
* New functions for creating portable FIFOs and Unix socket connections.
See `conn_create_fifo()`, `conn_create_unix_socket()` and
`vignettes/internals.Rmd` for documentation. These functions are currently
experimental.
# processx 3.6.1
* 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_error` and `rlang_trace` classes,
because they are actually not compatible with rlang errors and traces.
# processx 3.6.0
* processx now gives better error messages, and better stack traces.
# processx 3.5.3
* `run()` now sets `stderr` to `NULL` in 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.
* processx now does not fail if the current working directory contains
a non-ASCII character on Windows, and `getwd()` returns a short path
for it (#313).
# processx 3.5.2
* `run()` now does not truncate stdout and stderr when the output
contains multibyte characters (#298, @infotroph).
* 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).
# processx 3.5.1
* Fix a potential failure when polling curl file descriptors on Windows.
# processx 3.5.0
* You can now append environment variables to the ones set in the current
process if you include `"current"` in the value of `env`, in `run()`
and for `process$new()`: `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()` is now much faster with large standard output or standard
error (#286).
* `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.
# processx 3.4.5
* New options in `pty_options` to set the initial size of the pseudo
terminal.
* Reading the standard output or error now does not crash occasionally
when a `\n` character is at the beginning of the input buffer (#281).
# processx 3.4.4
* processx now works correctly for non-ASCII commands and arguments passed
in the native encoding, on Windows (#261, #262, #263, #264).
* Providing multiple environment variables now works on windows (#267).
# processx 3.4.3
* 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).
* The `$as_ps_handle()` method works now better; previously it
sometimes created an invalid `ps::ps_handle` object, if the system
clock has changed (#258).
# processx 3.4.2
* `run()` now does a better job with displaying the spinner on terminals
that buffer the output (#223).
* 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).
* The `process$wait()` method now does not leak file descriptors on
Unix when interrupted (#141).
# processx 3.4.1
* Now `run()` does not create an `ok` variable in the global environment.
# processx 3.4.0
* 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.error` variable for every un-caught processx
error to the error condition, and also sets `.Last.error.trace` to 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.
* `process` now supports creating pseudo terminals on Unix systems.
* `conn_create_pipepair()` gets new argument to set the pipes as blocking
or non-blocking.
* `process` does 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 `...` arguments to `process$new()`.
* `run()` now does not error if the process is killed in a callback.
# processx 3.3.1
* Fix a crash on Windows, when a connection that has a pending read
internally is finalized.
# processx 3.3.0
* `process` can 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 `stderr_to_stdout` argument.
* The `$kill()` and `$kill_tree()` methods get a `close_connection = TRUE`
argument that closes all pipe connections of the process.
* `run()` now always kills the process (and its process tree if
`cleanup_tree` is `TRUE`) before exiting. This also closes all
pipe connections (#149).
# processx 3.2.1
* processx does not depend on assertthat now, and the crayon package
is now an optional dependency.
# processx 3.2.0
* New `process$kill_tree()` method, and new `cleanup_tree` arguments in
`run()` and `process$new()`, to clean up the process tree rooted at a
processx process. (#139, #143).
* New `process$interupt()` method to send an interrupt to a process,
SIGINT on Unix, CTRL+C on Windows (#127).
* New `stdin` argument in `process$new()` to support writing to the
standard input of a process (#27, #114).
* New `connections` argument in `process$new()` to support passing extra
connections to the child process, in addition to the standard streams.
* New `poll_connection` argument to `process$new()`, an extra connection
that can be used to poll the process, even if `stdout` and `stderr` are
not pipes (#125).
* `poll()` now works with connections objects, and they can be mixed with
process objects (#121).
* New `env` argument in `run()` and `process$new()`, to set the
environment of the child process, optionally (#117, #118).
* Removed the `$restart()` method, because it was less useful than
expected, and hard to maintain (#116).
* New `conn_set_stdout()` and `conn_set_stderr()` to set the standard
output or error of the calling process.
* New `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).
* When `run()` is interrupted, no error message is printed, just like
for interruption of R code in general. The thrown condition now also
has the `interrupt` class (#148).
# processx 3.1.0
* Fix interference with the parallel package, and other packages that
redefine the `SIGCHLD` signal handler on Unix. If the processx signal
handler is overwritten, we might miss the exit status of some processes
(they are set to `NA`).
* `run()` and `process$new()` allow specifying the working directory
of the process (#63).
* Make the debugme package an optional dependency (#74).
* processx is now compatible with R 3.1.x.
* Allow polling more than 64 connections on Windows, by using IOCP
instead of `WaitForMultipleObjects()` (#81, #106).
* 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).
# processx 3.0.3
* Fix a crash on windows when trying to run a non-existing command (#90)
* Fix a race condition in `process$restart()`
* `run()` and `process$new()` do not support the `commandline` argument
any more, because process cleanup is error prone with an intermediate
shell. (#88)
* `processx` process objects no longer use R connection objects,
because the R connection API was retroactive made private by R-core
`processx` uses 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 `processx` re-encodes `stdout` and `stderr` in UTF-8.
* Cloning of process objects is disables now, as it is likely that it
causes problems (@wch).
* `supervise` option to kill child process if R crashes (@wch).
* Add `get_output_file` and `get_error_file`, `has_output_connection()`
and `has_error_connection()` methods (@wch).
* `stdout` and `stderr` default to `NULL` now, 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.
# processx 2.0.0.1
This is an unofficial release, created by CRAN, to fix compilation on
Solaris.
# processx 2.0.0
First public release.