From 9eec3029e13b791b8a4954e38d5bb7db6e2ff68f Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Tue, 26 May 2026 14:40:36 +0300 Subject: fix: reduce idle agent checker CPU refs #300 --- src/platform/fallback.rs | 5 +++++ src/platform/linux.rs | 19 +++++++++++++++++++ src/platform/macos.rs | 20 ++++++++++++++++++++ 3 files changed, 44 insertions(+) (limited to 'src/platform') diff --git a/src/platform/fallback.rs b/src/platform/fallback.rs index 825aaccd..a8f9d8ce 100644 --- a/src/platform/fallback.rs +++ b/src/platform/fallback.rs @@ -7,6 +7,11 @@ pub fn foreground_job(_child_pid: u32) -> Option { None } +/// Unsupported platform stub. +pub fn foreground_group_leader_job(_process_group_id: u32) -> Option { + None +} + /// Unsupported platform stub. pub fn foreground_process_group_id(_child_pid: u32) -> Option { None diff --git a/src/platform/linux.rs b/src/platform/linux.rs index 73a4f0a5..00f4b906 100644 --- a/src/platform/linux.rs +++ b/src/platform/linux.rs @@ -54,6 +54,25 @@ pub fn foreground_job(child_pid: u32) -> Option { }) } +pub fn foreground_group_leader_job(process_group_id: u32) -> Option { + let (pgrp, name) = process_pgrp_and_comm(process_group_id)?; + if pgrp as u32 != process_group_id { + return None; + } + + let argv = process_argv(process_group_id); + Some(ForegroundJob { + process_group_id, + processes: vec![ForegroundProcess { + pid: process_group_id, + name, + argv0: None, + cmdline: argv.as_ref().map(|parts| parts.join(" ")), + argv, + }], + }) +} + pub fn foreground_process_group_id(child_pid: u32) -> Option { // /proc//stat format: "pid (comm) state ppid pgrp session tty_nr tpgid ..." // The (comm) field can contain spaces and parens, so we find the last ')' first. diff --git a/src/platform/macos.rs b/src/platform/macos.rs index bfce664a..354a6b3c 100644 --- a/src/platform/macos.rs +++ b/src/platform/macos.rs @@ -52,6 +52,26 @@ pub fn foreground_job(child_pid: u32) -> Option { }) } +pub fn foreground_group_leader_job(process_group_id: u32) -> Option { + let info = process_bsdinfo(process_group_id)?; + if info.pbi_pgid != process_group_id { + return None; + } + + let name = comm_from_bsdinfo(&info)?; + let argv = process_argv(process_group_id); + Some(ForegroundJob { + process_group_id, + processes: vec![ForegroundProcess { + pid: process_group_id, + name, + argv0: process_argv0_name(process_group_id), + cmdline: argv.as_ref().map(|parts| parts.join(" ")), + argv, + }], + }) +} + fn process_group_pids(process_group_id: u32) -> Vec { let mut capacity = 16usize; -- cgit v1.2.3