
    ⾙hg                         d Z ddlZddlmZmZmZmZmZmZm	Z	m
Z
mZ ddlmZmZ dZ ed      j                   Z G d de      Z ee      Zdd	Zdd
ZddZddZd ZddZd Zy)zZ
    billiard._win
    ~~~~~~~~~~~~~

    Windows utilities to terminate process groups.

    N)	byrefsizeofwindll	StructureWinErrorPOINTERc_size_tc_charc_void_p)DWORDLONG   c                   R    e Zd Zdefdefdefdefdefdefdefdefd	efd
edz  fg
Zy)PROCESSENTRY32dwSizecntUsageth32ProcessIDth32DefaultHeapIDth32ModuleID
cntThreadsth32ParentProcessIDpcPriClassBasedwFlags	szExeFilei  N)__name__
__module____qualname__r   r	   r   r
   _fields_     I/var/www/Befach/backend/env/lib/python3.12/site-packages/billiard/_win.pyr   r      s]    	5	U	% 	h'		u	&	4 	E	fsl#Hr!   r   c                 l    t         j                  j                  | |      }|t        k(  r
t	               |S N)r   kernel32CreateToolhelp32SnapshotINVALID_HANDLE_VALUEr   )r   r   	hSnapshots      r"   r&   r&   +   s3    889FHI((jr!   c                 L    t        t        j                  j                  | |      S r$   )_Process32nr   r%   Process32Firstr(   pes     r"   r+   r+   3   s    v55y"EEr!   c                 L    t        t        j                  j                  | |      S r$   )r*   r   r%   Process32Nextr,   s     r"   r/   r/   7   s    v44iDDr!   c                     |
t               }t        t               |_         | |t        |            }|s0t        j
                  j                         t        k(  ry t               |S r$   )	r   r   r   r   r   r%   GetLastErrorERROR_NO_MORE_FILESr   )funr(   r-   successs       r"   r*   r*   ;   sT    	z~&BI)U2Y'G??'')-@@jIr!   c                      t               } i }t        |       }|r4|j                  r|j                  ||j                  <   t	        | |      }|r4|S )z}Return a dictionary with all processes pids as keys and their
       parents as value. Ignore processes with no parents.
    )r&   r+   r   r   r/   )hparentsr-   s      r"   get_all_processes_pidsr8   G   sU     	!"AG		B
!!(*(>(>GB$$%1b! 
 Nr!   c                    t               }t        |j                               }| h}	 |j                         }|D ]  }||   |v s|j	                  |        ||k(  rn|j                         }G|s|j                  |        t        |      S )z1Return a list with all the pids of a process tree)r8   listkeyscopyaddremove)pidinclude_parentr7   all_pidspidspids_new_pids          r"   get_processtree_pidsrE   V   s    $&GGLLN#H5D
99;Dt}$T"  t}}  C:r!   c                 T    t        |       }|D ]  }t        j                  ||        y)z&Kill a process and all its descendantsN)rE   oskill)r?   signumfamily_pidsrD   s       r"   kill_processtreerK   m   s$    &s+K
f r!   )   r   r$   )T)__doc__rG   ctypesr   r   r   r   r   r   r	   r
   r   ctypes.wintypesr   r   r2   valuer'   r   LPPROCESSENTRY32r&   r+   r/   r*   r8   rE   rK   r    r!   r"   <module>rR      sw    
  
 ( |)) Y  >* FE	.r!   