continue to remove --service runtime
This commit is contained in:
parent
3b4006b821
commit
f11c332cb4
@ -17,6 +17,7 @@ use core_graphics::{
|
|||||||
display::{kCGNullWindowID, kCGWindowListOptionOnScreenOnly, CGWindowListCopyWindowInfo},
|
display::{kCGNullWindowID, kCGWindowListOptionOnScreenOnly, CGWindowListCopyWindowInfo},
|
||||||
window::{kCGWindowName, kCGWindowOwnerPID},
|
window::{kCGWindowName, kCGWindowOwnerPID},
|
||||||
};
|
};
|
||||||
|
use hbb_common::sysinfo::{Pid, Process, ProcessRefreshKind, System};
|
||||||
use hbb_common::{anyhow::anyhow, bail, log, message_proto::Resolution};
|
use hbb_common::{anyhow::anyhow, bail, log, message_proto::Resolution};
|
||||||
use include_dir::{include_dir, Dir};
|
use include_dir::{include_dir, Dir};
|
||||||
use objc::{class, msg_send, sel, sel_impl};
|
use objc::{class, msg_send, sel, sel_impl};
|
||||||
@ -487,25 +488,21 @@ pub fn start_os_service() {
|
|||||||
crate::platform::macos::hide_dock();
|
crate::platform::macos::hide_dock();
|
||||||
log::info!("Username: {}", crate::username());
|
log::info!("Username: {}", crate::username());
|
||||||
let mut sys = System::new();
|
let mut sys = System::new();
|
||||||
sys.refresh_processes_specifics(ProcessRefreshKind::new());
|
|
||||||
let path =
|
let path =
|
||||||
std::fs::canonicalize(std::env::current_exe().unwrap_or_default()).unwrap_or_default();
|
std::fs::canonicalize(std::env::current_exe().unwrap_or_default()).unwrap_or_default();
|
||||||
|
let mut server = get_server_start_time(&mut sys, &path);
|
||||||
let my_start_time = sys
|
let my_start_time = sys
|
||||||
.process((std::process::id() as usize).into())
|
.process((std::process::id() as usize).into())
|
||||||
.map(|p| p.start_time())
|
.map(|p| p.start_time())
|
||||||
.unwrap_or_default() as i64;
|
.unwrap_or_default() as i64;
|
||||||
log::info!(
|
log::info!("Startime: {my_start_time} vs {:?}", server);
|
||||||
"Startime: {my_start_time} vs {:?}",
|
|
||||||
get_server_start_time(&mut sys, &path)
|
|
||||||
);
|
|
||||||
|
|
||||||
std::thread::spawn(move || loop {
|
std::thread::spawn(move || loop {
|
||||||
loop {
|
std::thread::sleep(std::time::Duration::from_secs(1));
|
||||||
std::thread::sleep(std::time::Duration::from_secs(1));
|
if server.is_none() {
|
||||||
let Some(start_time) = get_server_start_time(&mut sys, &path) else {
|
server = get_server_start_time(&mut sys, &path);
|
||||||
continue;
|
}
|
||||||
};
|
if let Some((start_time, pid)) = server {
|
||||||
|
|
||||||
if my_start_time <= start_time {
|
if my_start_time <= start_time {
|
||||||
// I tried add delegate (using tao and with its main loop0, but it works in normal mode, but not work as daemon
|
// I tried add delegate (using tao and with its main loop0, but it works in normal mode, but not work as daemon
|
||||||
log::info!(
|
log::info!(
|
||||||
@ -513,6 +510,20 @@ pub fn start_os_service() {
|
|||||||
);
|
);
|
||||||
std::process::exit(0);
|
std::process::exit(0);
|
||||||
}
|
}
|
||||||
|
// only refresh this pid and check if valid, no need to refresh all processes since refreshing all is expensive, about 10ms on my machine
|
||||||
|
if !sys.refresh_process(pid) {
|
||||||
|
server = None;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if let Some(p) = sys.process(pid.into()) {
|
||||||
|
if let Some(p) = get_server_start_time_of(p, &path) {
|
||||||
|
server = Some((p, pid));
|
||||||
|
} else {
|
||||||
|
server = None;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
server = None;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -614,25 +625,31 @@ pub fn hide_dock() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
use hbb_common::sysinfo::{ProcessRefreshKind, System};
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn get_server_start_time(sys: &mut System, path: &PathBuf) -> Option<i64> {
|
fn get_server_start_time_of(p: &Process, path: &PathBuf) -> Option<i64> {
|
||||||
|
let cmd = p.cmd();
|
||||||
|
if cmd.len() <= 1 {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
if &cmd[1] != "--server" {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
let Ok(cur) = std::fs::canonicalize(p.exe()) else {
|
||||||
|
return None;
|
||||||
|
};
|
||||||
|
if &cur != path {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
Some(p.start_time() as _)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn get_server_start_time(sys: &mut System, path: &PathBuf) -> Option<(i64, Pid)> {
|
||||||
sys.refresh_processes_specifics(ProcessRefreshKind::new());
|
sys.refresh_processes_specifics(ProcessRefreshKind::new());
|
||||||
for (_, p) in sys.processes() {
|
for (_, p) in sys.processes() {
|
||||||
let cmd = p.cmd();
|
if let Some(t) = get_server_start_time_of(p, path) {
|
||||||
if cmd.len() <= 1 {
|
return Some((t, p.pid() as _));
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
if &cmd[1] != "--server" {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
let Ok(cur) = std::fs::canonicalize(p.exe()) else {
|
|
||||||
continue;
|
|
||||||
};
|
|
||||||
if &cur != path {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
return Some(p.start_time() as _);
|
|
||||||
}
|
}
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user