Skip to main content

GracefulShutdown

Struct GracefulShutdown 

Source
pub struct GracefulShutdown {
    pub unix: UnixGracefulShutdown,
}
Expand description

Per-platform graceful-shutdown policy passed to ProcessHandle::terminate and related APIs.

Carries a sequence of one or more graceful-shutdown signals to dispatch before falling back to the implicit forceful kill. The shape is platform-conditional because the available graceful-shutdown signals themselves are platform-conditional:

SIGKILL on Unix and TerminateProcess on Windows are always the implicit final fallback; they are not configurable phases.

§Choosing the Unix sequence

See UnixGracefulShutdown for the recommended single-signal sequences and a discussion of why mixing SIGINT and SIGTERM does not cover children with unknown signal handlers.

§Cross-platform construction

Use GracefulShutdown::builder to write a single cross-platform construction expression. The setter for the platform that does not match the current target accepts its argument without using it, so no cfg gates are needed at the call site:

use std::time::Duration;
use tokio_process_tools::GracefulShutdown;

// Common case: single-signal sequences via the convenience shortcuts.
let shutdown = GracefulShutdown::builder()
    .unix_sigterm(Duration::from_secs(10))
    .windows_ctrl_break(Duration::from_secs(10))
    .build();

For the rare multiphase case, use the GracefulShutdownBuilder::unix setter, accepting a custom-built UnixGracefulShutdown:

use std::time::Duration;
use tokio_process_tools::{
    GracefulShutdown, UnixGracefulPhase, UnixGracefulShutdown,
};

let shutdown = GracefulShutdown::builder()
    .unix(UnixGracefulShutdown::from_phases([
        UnixGracefulPhase::interrupt(Duration::from_secs(60)),
        UnixGracefulPhase::terminate(Duration::from_secs(5)),
    ]))
    .windows_ctrl_break(Duration::from_secs(10))
    .build();

§Platform availability

This type is only available on Unix and Windows because the underlying graceful-shutdown signals only exist there. On other Tokio-supported targets the spawn, wait, output-collection, and ProcessHandle::kill APIs remain available; only the graceful-termination surface (terminate(...), terminate_on_drop(...), wait_for_completion_or_terminate(...), the send_*_signal(...) methods, and this type) is gated out.

Fields§

§unix: UnixGracefulShutdown

Unix graceful-shutdown phase sequence.

Implementations§

Source§

impl GracefulShutdown

Source

pub fn builder() -> GracefulShutdownBuilder<UnixUnset>

Start a fluent specification of a GracefulShutdown value.

Call unix, then windows, then build. The setter for the platform that does not match the current target accepts its argument without using it, which lets cross-platform code construct the value without cfg gates.

Trait Implementations§

Source§

impl Clone for GracefulShutdown

Source§

fn clone(&self) -> GracefulShutdown

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for GracefulShutdown

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl PartialEq for GracefulShutdown

Source§

fn eq(&self, other: &GracefulShutdown) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for GracefulShutdown

Source§

impl StructuralPartialEq for GracefulShutdown

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<O> ObjectMarkerFor<Local> for O
where O: 'static,

Source§

impl<O> ObjectMarkerFor<SendSync> for O
where O: 'static + Send + Sync,

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> Sink for T
where T: Send + 'static,