aboutsummaryrefslogtreecommitdiff
path: root/src/platform
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-21 22:15:01 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-21 22:17:37 +0300
commit659badf106786f5611e750de0e4936e47c69a3d4 (patch)
tree3cad8ed17a4e4d91d5e178e953a2349e6afa4b42 /src/platform
parentf7fa9486855c824bcd7e783e2d3eb4d12ad85205 (diff)
fix: avoid agent detection from runtime arguments
refs #238
Diffstat (limited to 'src/platform')
-rw-r--r--src/platform/linux.rs8
-rw-r--r--src/platform/macos.rs9
-rw-r--r--src/platform/mod.rs1
3 files changed, 11 insertions, 7 deletions
diff --git a/src/platform/linux.rs b/src/platform/linux.rs
index 269e3ad8..73a4f0a5 100644
--- a/src/platform/linux.rs
+++ b/src/platform/linux.rs
@@ -34,11 +34,13 @@ pub fn foreground_job(child_pid: u32) -> Option<ForegroundJob> {
continue;
}
+ let argv = process_argv(pid);
processes.push(ForegroundProcess {
pid,
name,
argv0: None,
- cmdline: process_cmdline(pid),
+ cmdline: argv.as_ref().map(|parts| parts.join(" ")),
+ argv,
});
}
@@ -73,7 +75,7 @@ fn process_pgrp_and_comm(pid: u32) -> Option<(i32, String)> {
Some((pgrp, comm))
}
-fn process_cmdline(pid: u32) -> Option<String> {
+fn process_argv(pid: u32) -> Option<Vec<String>> {
let bytes = std::fs::read(format!("/proc/{pid}/cmdline")).ok()?;
if bytes.is_empty() {
return None;
@@ -83,7 +85,7 @@ fn process_cmdline(pid: u32) -> Option<String> {
.filter(|part| !part.is_empty())
.map(|part| String::from_utf8_lossy(part).into_owned())
.collect();
- (!parts.is_empty()).then(|| parts.join(" "))
+ (!parts.is_empty()).then_some(parts)
}
/// Get the current working directory of a process.
diff --git a/src/platform/macos.rs b/src/platform/macos.rs
index 444f458d..add51aa4 100644
--- a/src/platform/macos.rs
+++ b/src/platform/macos.rs
@@ -32,11 +32,13 @@ pub fn foreground_job(child_pid: u32) -> Option<ForegroundJob> {
let Some(name) = comm_from_bsdinfo(&info) else {
continue;
};
+ let argv = process_argv(pid);
processes.push(ForegroundProcess {
pid,
name,
argv0: process_argv0_name(pid),
- cmdline: process_cmdline(pid),
+ cmdline: argv.as_ref().map(|parts| parts.join(" ")),
+ argv,
});
}
@@ -462,10 +464,9 @@ fn comm_from_bsdinfo(info: &libc::proc_bsdinfo) -> Option<String> {
String::from_utf8(bytes).ok()
}
-fn process_cmdline(pid: u32) -> Option<String> {
+fn process_argv(pid: u32) -> Option<Vec<String>> {
let buf = kern_procargs2(pid)?;
- let argv = procargs2_argv(&buf)?;
- Some(argv.join(" "))
+ procargs2_argv(&buf)
}
fn procargs2_argv(buf: &[u8]) -> Option<Vec<String>> {
diff --git a/src/platform/mod.rs b/src/platform/mod.rs
index 8cf2b08d..a836ed81 100644
--- a/src/platform/mod.rs
+++ b/src/platform/mod.rs
@@ -8,6 +8,7 @@ pub struct ForegroundProcess {
pub pid: u32,
pub name: String,
pub argv0: Option<String>,
+ pub argv: Option<Vec<String>>,
pub cmdline: Option<String>,
}