@@ -238,6 +238,9 @@ const PROC_LC_UID_OFF: usize = 9;
238238const PROC_LC_GID_OFF : usize = 13 ;
239239const PROC_LC_TS_OFF : usize = 17 ;
240240const PROC_LC_COMM_OFF : usize = 25 ;
241+ pub const PROC_LIFECYCLE_FORK : u8 = 1 ;
242+ pub const PROC_LIFECYCLE_EXEC : u8 = 2 ;
243+ pub const PROC_LIFECYCLE_EXIT : u8 = 3 ;
241244
242245struct ProcLifecycleEventData {
243246 lifecycle_type : u8 ,
@@ -249,6 +252,13 @@ struct ProcLifecycleEventData {
249252 comm : Vec < u8 > ,
250253}
251254
255+ #[ derive( Clone , Copy , Debug , PartialEq , Eq ) ]
256+ pub struct ProcLifecycleInfo {
257+ pub lifecycle_type : u8 ,
258+ pub pid : u32 ,
259+ pub parent_pid : u32 ,
260+ }
261+
252262impl TryFrom < & [ u8 ] > for ProcLifecycleEventData {
253263 type Error = Error ;
254264
@@ -440,6 +450,17 @@ impl ProcEvent {
440450
441451 Ok ( BoxedProcEvents ( Box :: new ( proc_event) ) )
442452 }
453+
454+ pub fn proc_lifecycle_info ( & self ) -> Option < ProcLifecycleInfo > {
455+ match & self . event_data {
456+ EventData :: ProcLifecycleEvent ( data) => Some ( ProcLifecycleInfo {
457+ lifecycle_type : data. lifecycle_type ,
458+ pid : data. pid ,
459+ parent_pid : data. parent_pid ,
460+ } ) ,
461+ _ => None ,
462+ }
463+ }
443464}
444465
445466#[ derive( Debug ) ]
@@ -491,3 +512,37 @@ impl Sendable for BoxedProcEvents {
491512 SendMessageType :: ProcEvents
492513 }
493514}
515+
516+ #[ cfg( test) ]
517+ mod tests {
518+ use super :: * ;
519+
520+ #[ test]
521+ fn test_proc_lifecycle_info_extracts_fields ( ) {
522+ let event_data = ProcLifecycleEventData {
523+ lifecycle_type : 1 ,
524+ pid : 4321 ,
525+ parent_pid : 1234 ,
526+ uid : 0 ,
527+ gid : 0 ,
528+ timestamp : 42 ,
529+ comm : b"sleep" . to_vec ( ) ,
530+ } ;
531+ let proc_event = ProcEvent {
532+ pid : 1234 ,
533+ pod_id : 0 ,
534+ thread_id : 0 ,
535+ coroutine_id : 0 ,
536+ process_kname : b"python3" . to_vec ( ) ,
537+ start_time : 42 ,
538+ end_time : 43 ,
539+ event_type : EventType :: ProcLifecycleEvent ,
540+ event_data : EventData :: ProcLifecycleEvent ( event_data) ,
541+ } ;
542+
543+ let info = proc_event. proc_lifecycle_info ( ) . expect ( "missing info" ) ;
544+ assert_eq ! ( info. lifecycle_type, 1 ) ;
545+ assert_eq ! ( info. pid, 4321 ) ;
546+ assert_eq ! ( info. parent_pid, 1234 ) ;
547+ }
548+ }
0 commit comments