@@ -174,6 +174,36 @@ pub fn _setup_sidecars_for_release_builds(
174174
175175 app_handle_clone. exit ( daemon_sidecar_exit_code) ;
176176 } ) ;
177+
178+ let child_process_pids = _find_child_process_pids ( ) ;
179+
180+ let ( _, process_wick_sidecar) = app
181+ . shell ( )
182+ . sidecar ( "process-wick" )
183+ . unwrap ( )
184+ . args ( [ "--targets" , & child_process_pids. join ( "," ) ] )
185+ . spawn ( )
186+ . expect ( "Failed to spawn sidecar" ) ;
187+ log:: info!(
188+ "Process wick sidecar spawned with PID: {}" ,
189+ process_wick_sidecar. pid( )
190+ ) ;
191+ }
192+
193+ #[ cfg( not( debug_assertions) ) ]
194+ pub fn _find_child_process_pids ( ) -> Vec < String > {
195+ let mut sys = System :: new_all ( ) ;
196+ sys. refresh_all ( ) ;
197+ let current_pid = sysinfo:: Pid :: from_u32 ( std:: process:: id ( ) ) ;
198+ let mut child_process_pids = Vec :: new ( ) ;
199+ for ( pid, process) in sys. processes ( ) {
200+ if let Some ( parent_pid) = process. parent ( ) {
201+ if parent_pid == current_pid {
202+ child_process_pids. push ( pid. to_string ( ) ) ;
203+ }
204+ }
205+ }
206+ child_process_pids
177207}
178208
179209pub fn _setup_system_tray ( app : & AppHandle ) {
@@ -331,57 +361,3 @@ pub fn _generate_secure_token() -> String {
331361 . expect ( "Failed to generate secure token key" ) ;
332362 hex:: encode ( key)
333363}
334-
335- /// Lists and kills all child processes of the current process
336- pub fn cleanup_child_processes ( ) {
337- log:: info!( "Starting child process cleanup" ) ;
338-
339- let mut sys = System :: new_all ( ) ;
340- sys. refresh_all ( ) ;
341-
342- let current_pid = sysinfo:: Pid :: from_u32 ( std:: process:: id ( ) ) ;
343- let mut child_processes = Vec :: new ( ) ;
344-
345- // Find all child processes
346- for ( pid, process) in sys. processes ( ) {
347- if let Some ( parent_pid) = process. parent ( ) {
348- if parent_pid == current_pid {
349- child_processes. push ( ( * pid, process. name ( ) . to_string_lossy ( ) . to_string ( ) ) ) ;
350- log:: info!(
351- "Found child process: PID={}, Name={}" ,
352- pid,
353- process. name( ) . to_string_lossy( )
354- ) ;
355- }
356- }
357- }
358-
359- if child_processes. is_empty ( ) {
360- log:: info!( "No child processes found to clean up" ) ;
361- return ;
362- }
363-
364- log:: info!(
365- "Found {} child processes, attempting to terminate them" ,
366- child_processes. len( )
367- ) ;
368-
369- // Kill each child process
370- for ( pid, name) in child_processes {
371- match sys. process ( pid) {
372- Some ( process) => {
373- log:: info!( "Terminating child process: PID={}, Name={}" , pid, name) ;
374- if process. kill ( ) {
375- log:: info!( "Successfully terminated process {} ({})" , pid, name) ;
376- } else {
377- log:: warn!( "Failed to terminate process {} ({})" , pid, name) ;
378- }
379- }
380- None => {
381- log:: warn!( "Process {} ({}) no longer exists" , pid, name) ;
382- }
383- }
384- }
385-
386- log:: info!( "Child process cleanup completed" ) ;
387- }
0 commit comments