
    hg                         S r SSKrSSKJrJrJrJrJrJrJ	r	J
r
Jr  SSKJrJr  Sr\" S5      R                   r " S S\5      r\" \5      rSS	 jrSS
 jrSS jrSS jrS rSS jrS rg)zN
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                   Z    \ rS rSrS\4S\4S\4S\4S\4S\4S\4S	\4S
\4S\S-  4/
rSr	g)PROCESSENTRY32   dwSizecntUsageth32ProcessIDth32DefaultHeapIDth32ModuleID
cntThreadsth32ParentProcessIDpcPriClassBasedwFlags	szExeFilei   N)
__name__
__module____qualname____firstlineno__r   r	   r   r
   _fields___static_attributes__r       5D:\TimeStamps\venv\Lib\site-packages\billiard/_win.pyr   r      s]    	5	U	% 	h'		u	&	4 	E	fsl#Hr$   r   c                 n    [         R                  R                  U U5      nU[        :X  a
  [	        5       eU$ N)r   kernel32CreateToolhelp32SnapshotINVALID_HANDLE_VALUEr   )r   r   	hSnapshots      r%   r)   r)   +   s3    889FHI((jr$   c                 J    [        [        R                  R                  X5      $ r'   )_Process32nr   r(   Process32Firstr+   pes     r%   r.   r.   3   s    v55yEEr$   c                 J    [        [        R                  R                  X5      $ r'   )r-   r   r(   Process32Nextr/   s     r%   r2   r2   7   s    v44iDDr$   c                     Uc
  [        5       n[        [         5      Ul        U " U[        U5      5      nU(       d1  [        R
                  R                  5       [        :X  a  g [        5       eU$ r'   )	r   r   r   r   r   r(   GetLastErrorERROR_NO_MORE_FILESr   )funr+   r0   successs       r%   r-   r-   ;   sT    	z~&BI)U2Y'G??'')-@@jIr$   c                      [        5       n 0 n[        U 5      nU(       a=  UR                  (       a  UR                  XR                  '   [	        X5      nU(       a  M=  U$ )zrReturn a dictionary with all processes pids as keys and their
parents as value. Ignore processes with no parents.
)r)   r.   r   r   r2   )hparentsr0   s      r%   get_all_processes_pidsr;   G   sS     	!"AG		B
!!(*(>(>G$$%1! "
 Nr$   c                 .   [        5       n[        UR                  5       5      nU 1n UR                  5       nU H  nX&   U;   d  M  UR	                  U5        M      XT:X  a  OUR                  5       nML  U(       d  UR                  U 5        [        U5      $ )z1Return a list with all the pids of a process tree)r;   listkeyscopyaddremove)pidinclude_parentr:   all_pidspidspids_new_pids          r%   get_processtree_pidsrH   V   s    $&GGLLN#H5D
99;D}$T"  }}  C:r$   c                 X    [        U 5      nU H  n[        R                  " X15        M     g)z&Kill a process and all its descendantsN)rH   oskill)rB   signumfamily_pidsrG   s       r%   kill_processtreerN   m   s"    &s+K
 r$   )   r   r'   )T)__doc__rJ   ctypesr   r   r   r   r   r   r	   r
   r   ctypes.wintypesr   r   r5   valuer*   r   LPPROCESSENTRY32r)   r.   r2   r-   r;   rH   rN   r   r$   r%   <module>rU      sw    
  
 ( |)) Y  >* FE	.r$   