From 6237ceacc163a827496e11bb0a835cc3b1ee917d Mon Sep 17 00:00:00 2001 From: Harvey Hunt Date: Fri, 21 Oct 2022 13:49:04 +0100 Subject: [PATCH] command: Add process_group method to Command struct Rust 1.64 stabilised the `process_group` method of the `std::os::unix::process::CommandExt` trait. This allows the caller to set the process group that a command is spawned in. Expose that functionality from Tokio's `Command` structure, behind the unstable feature. This fixes #4312. --- tokio/src/process/mod.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tokio/src/process/mod.rs b/tokio/src/process/mod.rs index e5ee5db2ba0..2e2507e7792 100644 --- a/tokio/src/process/mod.rs +++ b/tokio/src/process/mod.rs @@ -690,6 +690,36 @@ impl Command { self } + /// Sets the process group ID (PGID) of the child process. Equivalent to a + /// setpgid call in the child process, but may be more efficient. + /// + /// Process groups determine which processes receive signals. + /// + /// **Note**: This is an [unstable API][unstable] but will be stabilised once + /// tokio's MSRV is sufficiently new. See [the documentation on + /// unstable features][unstable] for details about using unstable features. + /// + /// If you want similar behaviour without using this unstable feature you can + /// create a [`std::process::Command`] and convert that into a + /// [`tokio::process::Command`] using the `From` trait. + /// + /// [unstable]: crate#unstable-features + /// [`tokio::process::Command`]: crate::process::Command + /// + /// ```no_run + /// use tokio::process::Command; + /// + /// let command = Command::new("ls") + /// .process_group(0); + /// ``` + #[cfg(unix)] + #[cfg(tokio_unstable)] + #[cfg_attr(docsrs, doc(cfg(all(unix, tokio_unstable))))] + pub fn process_group(&mut self, pgroup: i32) -> &mut Command { + self.std.process_group(pgroup); + self + } + /// Executes the command as a child process, returning a handle to it. /// /// By default, stdin, stdout and stderr are inherited from the parent.