Struct tracing::stdlib::os::linux::process::PidFd

source ·
#[repr(transparent)]
pub struct PidFd { inner: PidFd, }
🔬This is a nightly-only experimental API. (linux_pidfd #82971)
Available on Linux only.
Expand description

This type represents a file descriptor that refers to a process.

A PidFd can be obtained by setting the corresponding option on Command with create_pidfd. Subsequently, the created pidfd can be retrieved from the Child by calling pidfd or into_pidfd.

Example:

#![feature(linux_pidfd)]
use std::os::linux::process::{CommandExt, ChildExt};
use std::process::Command;

let mut child = Command::new("echo")
    .create_pidfd(true)
    .spawn()
    .expect("Failed to spawn child");

let pidfd = child
    .into_pidfd()
    .expect("Failed to retrieve pidfd");

// The file descriptor will be closed when `pidfd` is dropped.

Refer to the man page of pidfd_open(2) for further details.

Fields§

§inner: PidFd
🔬This is a nightly-only experimental API. (linux_pidfd #82971)

Implementations§

source§

impl PidFd

source

pub fn kill(&self) -> Result<(), Error>

🔬This is a nightly-only experimental API. (linux_pidfd #82971)

Forces the child process to exit.

Unlike Child::kill it is possible to attempt to kill reaped children since PidFd does not suffer from pid recycling races. But doing so will return an Error.

source

pub fn wait(&self) -> Result<ExitStatus, Error>

🔬This is a nightly-only experimental API. (linux_pidfd #82971)

Waits for the child to exit completely, returning the status that it exited with.

Unlike Child::wait it does not ensure that the stdin handle is closed. Additionally it will not return an ExitStatus if the child has already been reaped. Instead an error will be returned.

source

pub fn try_wait(&self) -> Result<Option<ExitStatus>, Error>

🔬This is a nightly-only experimental API. (linux_pidfd #82971)

Attempts to collect the exit status of the child if it has already exited.

Unlike Child::try_wait this method will return an Error if the child has already been reaped.

Trait Implementations§

source§

impl AsFd for PidFd

source§

fn as_fd(&self) -> BorrowedFd<'_>

Borrows the file descriptor. Read more
source§

impl AsRawFd for PidFd

source§

fn as_raw_fd(&self) -> i32

Extracts the raw file descriptor. Read more
source§

impl Debug for PidFd

source§

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

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

impl From<OwnedFd> for PidFd

source§

fn from(fd: OwnedFd) -> PidFd

Converts to this type from the input type.
source§

impl From<PidFd> for OwnedFd

source§

fn from(pid_fd: PidFd) -> OwnedFd

Converts to this type from the input type.
source§

impl FromRawFd for PidFd

source§

unsafe fn from_raw_fd(fd: i32) -> PidFd

Constructs a new instance of Self from the given raw file descriptor. Read more
source§

impl IntoRawFd for PidFd

source§

fn into_raw_fd(self) -> i32

Consumes this object, returning the raw underlying file descriptor. Read more

Auto Trait Implementations§

§

impl Freeze for PidFd

§

impl RefUnwindSafe for PidFd

§

impl Send for PidFd

§

impl Sync for PidFd

§

impl Unpin for PidFd

§

impl UnwindSafe for PidFd

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> 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<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