#[non_exhaustive]pub struct Lamb {
pub pid: u32,
pub name: String,
}Expand description
One process the OS reports as a descendant of a sheep.
§What this is not
It is not the set of processes that die with the sheep, and nothing here
should be read as promising that. The list is built by walking the OS’s
parent-pid links; the stop ladder acts on the process GROUP, and the two
units diverge in both directions — a lamb that forks and exits leaves its
own children re-parented to init, out of this list and still in the group,
while a setsid() grandchild stays in this list and leaves the group.
shep-daemon’s limits module doc has the full account, and it is the
authority; this is a pointer to it, not a second copy free to drift.
§Why a name and not a command line
name is the executable’s name as the OS reports it (node, sh,
python3), never its argument vector. A process’s argv routinely carries
credentials — a --password= flag, a URL with a token in the query string —
and this field rides in shep describe --format json, which is output
people paste into bug reports. A pid alone would be safe too, and was
considered; it was rejected because a tree of bare integers sends the
operator to ps, which is the work the tree exists to save.
§Why no memory figure
The sheep’s own row already reports its whole tree’s resident size
(ProcessInfo::memory_bytes), and a per-lamb breakdown is a profiler’s
job. deferred.md’s note on this struct’s growth asks for exactly this
restraint.
#[non_exhaustive]: shep-core is a published library, this type is new, and
the two obvious next fields (a parent pid, so a deep tree can be nested
rather than flattened; a start time) would otherwise be breaking additions
(IR-20). Build one with Self::new.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.pid: u32The lamb’s own pid.
name: StringThe executable’s name, as the OS reports it. Never its command line.
Implementations§
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Lamb
impl<'de> Deserialize<'de> for Lamb
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for Lamb
impl StructuralPartialEq for Lamb
Auto Trait Implementations§
impl Freeze for Lamb
impl RefUnwindSafe for Lamb
impl Send for Lamb
impl Sync for Lamb
impl Unpin for Lamb
impl UnsafeUnpin for Lamb
impl UnwindSafe for Lamb
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.