use std::env;
pub fn open(path: &str) {
let os = env::consts::OS;
let mut command = match os {
"windows" => {
let mut command = std::process::Command::new("cmd");
command.args(["/C", path]);
command
}
"linux" | "macos" => {
let mut command = std::process::Command::new("xdg-open");
command.arg(path);
command
}
_ => {
eprintln!("Unsupported operating system: {}", os);
return;
}
};
match command.spawn() {
Ok(_) => {}
Err(err) => eprintln!("Failed to open {}: {}", path, err),
}
}
pub fn close(name: &str) {
let os = env::consts::OS;
let mut command = match os {
"windows" => {
let mut command = std::process::Command::new("taskkill");
command.args(["/IM", name, "/F"]);
command
}
"linux" | "macos" => {
let mut command = std::process::Command::new("pkill");
command.arg(name);
command
}
_ => {
eprintln!("Unsupported operating system: {}", os);
return;
}
};
match command.spawn() {
Ok(_) => println!("Successfully closed {}", name),
Err(err) => eprintln!("Failed to close {}: {}", name, err),
}
}
#[cfg(any(target_os = "linux", target_os = "macos"))]
pub fn get_pid(task_name: &str) -> Option<i32> {
for process in all_processes().unwrap() {
if let Ok(proc) = process {
if proc.stat.comm.to_lowercase() == task_name.to_lowercase() {
return Some(proc.pid); }
}
}
None
}