
    7Th}                         S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKr S SKrSS jr
SS jrS rS rS rS rS rS	 rS
 rS rg! \	 a    Sr N-f = f)    Nc                 N    U(       a  [         b  [        U 5        g[        U 5        g)z2Terminate process and its descendants with SIGKILLN)psutil_kill_process_tree_with_psutil!_kill_process_tree_without_psutilprocess
use_psutils     [/var/www/auris/envauris/lib/python3.13/site-packages/joblib/externals/loky/backend/utils.pykill_process_treer      s    f(&w/)'2    c                 L    [         R                  " S[        5        [        XS9  g )NzKrecursive_terminate is deprecated in loky 3.2, use kill_process_treeinstead)r	   )warningswarnDeprecationWarningr   r   s     r
   recursive_terminater      s     MM	
 g5r   c                     [         R                  " U R                  5      R                  SS9nUS S S2    H  n UR                  5         M      [         R                  " U R                  5      R                  5         U R                  5         g ! [         R                   a     g f = f! [         R                   a     M  f = f! [         R                   a     N\f = f)NT)	recursive)r   ProcesspidchildrenNoSuchProcesskilljoin)r   descendants
descendants      r
   r   r   !   s    nnW[[1::T:J "$B$'
	OO (w{{#((* LLN   ## 		
  s4   -B B).C B&%B&)C CCCc                 B    [         R                  S:X  a  [        U R                  5        O[	        U R                  5         U R                  5         g! [
         aA    [        R                  " 5       n[        R                  " SU 35        U R                  5          N[f = f)z(Terminate a process and its descendants.win32zqFailed to kill subprocesses on this platform. Please installpsutil: https://github.com/giampaolo/psutil
Details:
N)sysplatform_windows_taskkill_process_treer   _posix_recursive_kill	Exception	traceback
format_excr   r   r   r   )r   detailss     r
   r   r   6   s{    <<7"*7;;7!'++. LLN  &&( 	#	
 	s   )A A ABBc           	           [         R                  " SSSS[        U 5      /S S9  g ! [         R                   a  nUR                  S;  a  e  S nAg S nAff = f)Ntaskkillz/Fz/Tz/PID)stderr)      )
subprocesscheck_outputstrCalledProcessError
returncode)r   es     r
   r!   r!   M   sW    	tVSX6t	
 (( <<z)  *s   #& AAAc                     [        [        S[        R                  5      n [        R                  " X5        g ! [
         a)  nUR                  [        R                  :w  a  e  S nAg S nAff = f)NSIGKILL)getattrsignalSIGTERMosr   OSErrorerrnoESRCH)r   kill_signalr1   s      r
   _killr<   \   sQ    
 &)V^^<K
!  77ekk! "	s   8 
A+A&&A+c                 "    [         R                  " SS[        U 5      /SSS9nUR                  5        H  n[        U5      n[        U5        M     [        U 5        g! [         R                   a  nUR                  S:X  a  Sn SnANde SnAff = f)z@Recursively kill the descendants of a process before killing it.pgrepz-PNT)r)   text    )	r,   r-   r.   r/   r0   
splitlinesintr"   r<   )r   children_pidsr1   cpids       r
   r"   r"   l   s    	"//dCH%d
 ((*4yd# + 
#J (( <<1Ms   "A B1B	B		Bc                    Sn[        U R                  5       5       Vs/ s H  o"R                  c  M  UR                  PM     nnU(       dr  US:  al  US-  n[        U R                  5       5       Vs/ s H  nUR                  c  M  UR                  PM      nn[        R                  " S5        U(       d  US:  a  Ml  [        U5      $ s  snf s  snf )zReturn a formatted string with the exitcodes of terminated workers.

If necessary, wait (up to .25s) for the system to correctly set the
exitcode of one terminated worker.
   r   r@   g?)listvaluesexitcodetimesleep_format_exitcodes)	processespatiencep	exitcodess       r
   get_exitcodes_terminated_workerrR      s     H !!1!1!344q




4   HqLA )**,-
-zz AJJ- 	 

 	

4 HqL Y''

s   CC1CCc                     U  Vs/ s H  oc  M  [        U5       SU S3PM     nnSSR                  U5      -   S-   $ s  snf )z@Format a list of exit code with names of the signals if possible(){z, })_get_exitcode_namer   )rQ   r1   str_exitcodess      r
   rM   rM      sW     2;1:A'a 
!1#Q'   =))C//s   ==c                     [         R                  S:X  a  gU S:  a"   SS KnUR                  " U * 5      R                  $ U S:w  a  gg! [
         a     gf = f)Nr   UNKNOWNr   r+   EXIT)r   r    r5   Signalsname
ValueError)rJ   r5   s     r
   rX   rX      s^    
||w !|	>>8),111 
S   		s    A 
AA)T)r7   r   rK   r9   r5   r   r,   r$   r   ImportErrorr   r   r   r   r!   r<   r"   rR   rM   rX    r   r
   <module>rb      sn    	 
      
36*. *(40o  Fs   A	 	AA