
    Xh                        d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlmZ ddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddlm&Z& ddlm'Z' ddlm(Z( ddlm)Z) ddlm*Z* ddlm+Z+ ddlm,Z, ddlm-Z- ddlm.Z. ddlm/Z/ ddlm0Z0 dd lm1Z1 dd!lm2Z2 dd"lm3Z3 dd#lm4Z4 dd$lm5Z5 dd%lm6Z6 dd&lm7Z7 dd'lm8Z8 dd(lm9Z9 dd)lm:Z: dd*lm;Z;  G d+ d,e.      Z< G d- d.e.      Z=y)/Tests for psutil.Process class.    N)mock)AIX)BSD)LINUX)MACOS)NETBSD)OPENBSD)OSX)POSIX)WINDOWS)	open_text)
CI_TESTING)GITHUB_ACTIONS)GLOBAL_TIMEOUT)HAS_CPU_AFFINITY)HAS_ENVIRON)
HAS_IONICE)HAS_MEMORY_MAPS)HAS_PROC_CPU_NUM)HAS_PROC_IO_COUNTERS)
HAS_RLIMIT)HAS_THREADS)MACOS_11PLUS)PYPY)
PYTHON_EXE)PYTHON_EXE_ENV)PsutilTestCase)
ThreadTask)
call_until)copyload_shared_lib)create_c_exe)create_py_exe)process_namespace)pytestreap_children)retry_on_failure)sh)skip_on_access_denied)skip_on_not_implemented)wait_for_pidc                   <   e Zd ZdZd Zd Zd Zd Zej                  j                  e d      d        Zd	 Zej                  j                  ed
      d        Zd Zd Zd Zd Zd Zd Zd Zej                  j                  e d      d        Zd Zej                  j                  e d      d        Zej                  j                  e d       ee      d               Zej                  j                  e d      ej                  j                  e d      d               Z ej                  j                  e d      ej                  j                  e! d      d               Z"ej                  j                  e# d      d        Z$ej                  j                  e# d      d        Z%ej                  j                  e# d      d         Z&ej                  j                  e# d      d!        Z'ej                  j                  e# d      d"        Z(ej                  jS                  d#$      d%        Z*ej                  j                  e! d&      d'        Z+ej                  j                  e, d      d(        Z- e.        e/e0      ej                  j                  e, d      d)                      Z1 e.       d*        Z2d+ Z3ej                  j                  e4 d      d,        Z5ej                  j                  e4 d      d-        Z6d. Z7d/ Z8d0 Z9d1 Z:d2 Z;d3 Z< e.       d4        Z=ej                  j                  e d      d5        Z>ej                  j                  e d      d6        Z?d7 Z@d8 ZAd9 ZBd: ZCd; ZDej                  j                  eE d      d<        ZFej                  j                  eE d      d=        ZGej                  j                  eE d      d>        ZHej                  j                  eId?      d@        ZJej                  j                  eId?      dA        ZKej                  j                  e d      ej                  jS                  d#$      dB               ZL ee      ej                  j                  eMxs edC      dD               ZNdE ZOdF ZPdG ZQdH ZR e.       dI        ZSdJ ZTdK ZUdL ZVdM ZWdN ZXdO ZYdP ZZdQ Z[dR Z\dS Z]dT Z^dU Z_ej                  j                  e d      dV        Z`ej                  j                  e d      dW        Zaej                  j                  e d      dX        ZbdY ZcdZ Zdej                  j                  ee d      d[        Zfej                  j                  ee d      ej                  j                  e d      ej                  j                  egd\      ej                  j                  ed]      d^                             Zhy_)`TestProcessr   c                     t        j                         }|j                  t        j                         k(  sJ t        j                  t              5  d|_        d d d        y # 1 sw Y   y xY w)N!   )psutilProcesspidosgetpidr%   raisesAttributeErrorselfps     M/var/www/html/myenv/lib/python3.12/site-packages/psutil/tests/test_process.pytest_pidzTestProcess.test_pidK   sN    NNuu		###]]>* 	AE	 	 	s   A""A+c                     | j                         }|j                          |j                         }t        r|t        j
                  k(  sJ |t        j                   k(  sJ | j                  |       y N)spawn_psprockillwaitr   signalSIGTERMSIGKILLassert_proc_goner9   r:   codes      r;   	test_killzTestProcess.test_killQ   s[    	vvx6>>)))FNN?***a     c                     | j                         }|j                          |j                         }t        r|t        j
                  k(  sJ |t        j
                   k(  sJ | j                  |       y r>   )r?   	terminaterA   r   rB   rC   rE   rF   s      r;   test_terminatezTestProcess.test_terminate[   s[    	vvx6>>)))FNN?***a rI   c                     t         rt        j                  nt        j                  }| j	                         }|j                  |       |j                         }t        r||k(  s
J || k(  sJ | j                  |       y r>   )	r   rB   rD   rC   r?   send_signalrA   r   rE   )r9   sigr:   rG   s       r;   test_send_signalzTestProcess.test_send_signale   sc     %fnn6>>	cvvx3;;C4<<a rI   z	not POSIXreasonc                 H   t         j                  }| j                         }t        j                  dt
              5  t        j                  t        j                        5  |j                  |       d d d        d d d        | j                         }t        j                  dt              5  t        j                  t        j                        5  |j                  |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   *xY w# 1 sw Y   y xY w)Nzpsutil.os.killside_effect)rB   rC   r?   r   patchProcessLookupErrorr%   r6   r1   NoSuchProcessrN   PermissionErrorAccessDenied)r9   rO   r:   s      r;   test_send_signal_mockedz#TestProcess.test_send_signal_mockedp   s    nnZZ(6HI 	#v334 #c"#	# ZZ(oF 	#v223 #c"#	# 	#	# #	# 	## #	# 	#sG   $D  C42D -$DD#D4C=	9D  D	D	DD!c                 4   t         ddg}| j                  |      }|j                         }|dk(  sJ | j                  |       t         ddg}| j                  |t        j
                        }|j                         }|dk(  sJ | j                  |       t         ddg}| j                  |      }|j                         }|dk(  sJ | j                  |       t         dd	g}| j                  |      }|j                         }|dk(  sJ | j                  |       y )
N-cpassr   z1 / 0)stderr   zimport sys; sys.exit(5);   zimport os; os._exit(5);)r   r?   rA   rE   
subprocessPIPE)r9   cmdr:   rG   s       r;   test_wait_exitedzTestProcess.test_wait_exited}   s    4(c"vvxqyya 4)c*//:vvxqyya 4!;<c"vvxqyya 4!:;c"vvxqyya rI   zfails on NETBSDc                    | j                         }t        r"|j                  t        j                         t        j                  t        j                        5  |j                  d       d d d        |j                  t        j                         t        j                  t        j                        5  |j                  d       d d d        |j                  t        j                         |j                         t        j                   k(  sJ |j                         t        j                   k(  sJ y |j                          t        j                  t        j                        5  |j                  d       d d d        |j                          t        j                  t        j                        5  |j                  d       d d d        |j                          |j                         t        j                  k(  sJ |j                         t        j                  k(  sJ y # 1 sw Y   xY w# 1 sw Y   rxY w# 1 sw Y   xY w# 1 sw Y   xY w)NMbP?)timeout)r?   r   rN   rB   SIGSTOPr%   r6   r1   TimeoutExpiredrA   SIGCONTrC   suspendresumerK   r8   s     r;   test_wait_stoppedzTestProcess.test_wait_stopped   s    MM&..)v445 &u%&MM&..)v445 &u%&MM&..)668...668...IIKv445 &u%&HHJv445 &u%&KKM668v~~---668v~~---#& && && && &s0   H-7H:-I;I-H7:IIIc                 d   | j                         \  }}t        j                  t        j                        5  |j                  d       d d d        t        j                  t        j                        5  |j                  d       d d d        |j                          |j                          |j                         }|j                         }t        r|t        j                   k(  sJ |J y |t        j                  k(  sJ |t        j                  k(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w)N{Gz?)
spawn_children_pairr%   r6   r1   rj   rA   rK   r   rB   rC   )r9   child
grandchild	child_retgrandchild_rets        r;   test_wait_non_childrenz"TestProcess.test_wait_non_children   s     !446z]]6001 	JJt	]]6001 	"OOD!	" 	JJL	#*/// ")))......#	 		" 	"s   D4D&D#&D/c                    | j                         }|j                          t        j                  t        j
                        5  |j                  d       d d d        t        j                  t        j
                        5  |j                  d       d d d        t        j                  t              5  |j                  d       d d d        y # 1 sw Y   zxY w# 1 sw Y   IxY w# 1 sw Y   y xY w)Nrp   r   )r?   namer%   r6   r1   rj   rA   
ValueErrorr8   s     r;   test_wait_timeoutzTestProcess.test_wait_timeout   s    	]]6001 	FF4L	]]6001 	FF1I	]]:& 	FF2J	 			 		 		 	s$   CC4C'CC$'C0c                 r   | j                         }t        j                  t        j                        5  |j                  d       d d d        |j                          t        j                         t        z   }t        j                         |k  r	 |j                  d      }nt        j                  d      t        r|t        j                   k(  sJ |t        j                  k(  sJ | j                  |       y # 1 sw Y   xY w# t        j                  $ r Y nw xY wt        j                         |k  r)Nr   rh   )r?   r%   r6   r1   rj   rA   r@   timer   failr   rB   rD   rC   rE   )r9   r:   stop_atrG   s       r;   test_wait_timeout_nonblockingz)TestProcess.test_wait_timeout_nonblocking   s    ]]6001 	FF1I		))+.iikG#vvay ++i((FNN?***6>>)))a !	 	 (( 	 iikG#s   C;D ;DDDc                 j   t        j                         }|j                  d       |j                  d       t        d      D ]-  }|j                  d       }t	        |t
              sJ |dk\  r-J  t        j                  t              5  |j                  d       d d d        y # 1 sw Y   y xY w)Nrg   )intervald           rx   )	r1   r2   cpu_percentrange
isinstancefloatr%   r6   rz   )r9   r:   _percents       r;   test_cpu_percentzTestProcess.test_cpu_percent   s    NN	u%	u%s 	"AmmTm2Ggu---c>!>	" ]]:& 	'MM2M&	' 	' 	's   B))B2c                     t        j                  dd       5 }t        j                         j	                          |j
                  sJ 	 d d d        y # 1 sw Y   y xY w)Nzpsutil.cpu_count)return_value)r   rV   r1   r2   r   called)r9   ms     r;   test_cpu_percent_numcpus_nonez)TestProcess.test_cpu_percent_numcpus_none   sF    ZZ*> 	!NN((*88O8	 	 	s   1AAc           
         t        j                         j                         }|j                  dk\  sJ |       |j                  dk\  sJ |       |j
                  dk\  sJ |       |j                  dk\  sJ |       t        r|j                  dk\  sJ |       |j                  D ]5  }t        j                  dt        j                  t        ||                   7 y )Nr   z%H:%M:%S)r1   r2   	cpu_timesusersystemchildren_userchildren_systemr   iowait_fieldsr}   strftime	localtimegetattr)r9   timesry   s      r;   test_cpu_timeszTestProcess.test_cpu_times   s     **,zzS '%' ||s")E)"""c)050)$$+2U2+<<3&--&MM 	LDMM*dnnWUD5I&JK	LrI   c                     d } |        t        j                         j                         }t        j                         }t        |j                  |j                  z
        dk  sJ t        |j                  |j                  z
        dk  sJ y )Nc                      t        j                         j                  dz   } t        j                         j                  | k  r8t        d      D ]  }|dz  }	 t        j                         j                  | k  r7y y )Ng?順    )r4   r   r   r   )r   xs     r;   	waste_cpuz/TestProcess.test_cpu_times_2.<locals>.waste_cpu  sX    hhjoo+G((*//G+v A!GA ((*//G+rI   皙?)r1   r2   r   r4   r   absr   r   )r9   r   abs       r;   test_cpu_times_2zTestProcess.test_cpu_times_2  sm    	 	NN&&(HHJ166AFF?#c)))188ahh&'#---rI   znot supportedc                     t        j                         }|j                         }|dk\  sJ t        j                         dk(  r|dk(  sJ |j                         t	        t        j                               v sJ y Nr   r`   )r1   r2   cpu_num	cpu_countr   )r9   r:   nums      r;   test_cpu_numzTestProcess.test_cpu_num  sb    NNiikaxx"!8O8yy{eF$4$4$67777rI   c                     | j                         }t        j                         }t        |j                         |z
        dk  sJ t        j                  dt        j
                  |j                                      y )Nr   z%Y %m %d %H:%M:%S)r?   r}   r   create_timer   r   )r9   r:   nows      r;   test_create_timezTestProcess.test_create_time  sW    iik1==?S()A---)4>>!--/+JKrI   z
POSIX onlyc                     t        j                         j                         }|1	 t        j                  j                  t        d            }||k(  sJ y y # t        $ r t        j                  d      w xY w)Nttyzcan't rely on `tty` CLI)
r1   r2   terminalr4   pathrealpathr)   RuntimeErrorr%   skip)r9   r   r   s      r;   test_terminalzTestProcess.test_terminal"  sn    >>#,,.'gg&&r%y1
  3&     =kk";<<=s   (A A6)only_ifc                    t        j                         }|j                         }t        t        d      5 }|j                          d d d        |j                         }t        sxt        sr|j                  |j                  kD  sJ |j                  |j                  k(  sJ t        rl|j                  |j                  kD  sJ |j                  |j                  k(  s8J |j                  |j                  k\  sJ |j                  |j                  k\  sJ |j                         }t        | j                         d      5 }|j!                  t#        ddz  d             d d d        |j                         }|j                  |j                  k\  sJ |j                  |j                  k\  sJ |j                  |j                  k\  sJ |j                  |j                  k\  sJ t        r6|j                  |j                  kD  sJ |j                  |j                  k\  sJ t%        t'        |            D ]"  }t        r|dk\  r||   dk\  sJ ||   dk\  r"J  y # 1 sw Y   xY w# 1 sw Y   	xY w)Nrbwbr   i@B asciir   r   )r1   r2   io_countersopenr   readr   r   
read_countwrite_countr   
read_charswrite_chars
read_byteswrite_bytes
get_testfnwritebytesr   len)r9   r:   io1fio2is         r;   test_io_counterszTestProcess.test_io_counters.  s    NNmmo*d# 	qFFH	mmo3>>CNN222??coo555~~666#//999>>S^^333??coo555 mmo$//#T* 	3aGGE#-12	3mmo#//111#//111~~///~~///??S__444>>S^^333 s3x 	AqAvq6Q;;q6Q;;	7	 		3 	3s   I<I"I"I,z
linux onlyc                    fd}t        j                         t        s&j                         d   t         j                  k(  sJ t         j                  dk(  sJ t         j
                  dk(  sJ t         j                  dk(  sJ t         j                  dk(  sJ j                         }| j                  ||       j                  t         j                         t        j                               t         j                  dfk(  sJ t        j                  t              5  j                  t         j                  d       d d d        j                  t         j                         t        j                               t         j                  dfk(  sJ j                  t         j                  d       t        j                               t         j                  dfk(  sJ t        j                  t              5  j                  t         j                  d       d d d        	 j                  t         j
                  d       t        j                  t        d	
      5  j                  t         j                  d       d d d        t        j                  t        d	
      5  j                  t         j                  d       d d d        t        j                  t        d
      5  j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# t         j                  $ r Y w xY w# 1 sw Y   xY w# 1 sw Y   ~xY w# 1 sw Y   y xY w)Nc                 ^    | \  }}|t         j                  k(  rd}j                  ||       y Nr   )r1   IOPRIO_CLASS_NONEionice)initioclassvaluer:   s      r;   cleanupz.TestProcess.test_ionice_linux.<locals>.cleanupY  s-    !NGU&222HHWe$rI   r   r`   r         r      zioclass accepts no valuematchz$'ioclass' argument must be specified)r1   r2   r   r   r   IOPRIO_CLASS_RTIOPRIO_CLASS_BEIOPRIO_CLASS_IDLE
addCleanuptupler%   r6   rz   rZ   )r9   r   r   r:   s      @r;   test_ionice_linuxzTestProcess.test_ionice_linuxV  s   	% NN88:a=F$<$<<<<''1,,,%%***%%***''1,,,xxz& 	
))*QXXZ V%=%=q$AAAA]]:& 	8HHV--QH7	8 	
''(QXXZ V%;%;Q$????	''q1QXXZ V%;%;Q$????]]:& 	6HHV++1H5	6	HHV++1H5 ]]:-GH 	2HHV--q1	2]]:-GH 	2HHV--q1	2]]D
 	 HH1H	 	%	8 	8	6 	6 "" 			2 	2	2 	2	 	sN   #"L"L-!L& )!L?-!M1MLL#&L<;L<?MMM z!not supported on this win versionc                    t        j                         }t        s#|j                         t         j                  k(  sJ |j                         }| j                  |j                  |       |j                  t         j                         |j                         t         j                  k(  sJ |j                  t         j                         |j                         t         j                  k(  sJ 	 |j                  t         j                         |j                         t         j                  k(  sJ t        j                  t        d      5  |j                  t         j                  d       d d d        t        j                  t        d      5  |j                  t         j                  dz          d d d        y # t         j                  $ r Y w xY w# 1 sw Y   ixY w# 1 sw Y   y xY w)Nz&value argument not accepted on Windowsr   r`   r   zis not a valid priority)r1   r2   r   r   IOPRIO_NORMALr   IOPRIO_VERYLOW
IOPRIO_LOWIOPRIO_HIGHrZ   r%   r6   	TypeErrorrz   )r9   r:   r   s      r;   test_ionice_winzTestProcess.test_ionice_win  sr   
 NN88:!5!5555xxz$' 	
&&'xxzV22222	""#xxzV.....	4HHV''( 88:!3!3333]]E
 	4 HHV))H3	4 ]]:-FG 	-HHV''!+,	- 	- "" 		
	4 	4	- 	-s*   /F= "G#G"=GGG"G+c                    dd l }t        j                  t        j                               }t        t              D cg c]  }|j                  d      s| }}|sJ |       |D ]  }t        t        |      }|dk\  sJ |t        |      v r>|t        ||      k(  sJ t        r?|j                  |      |j                  |      k(  rcJ |j                  |      }t        |      dk(  sJ |d   dk\  sJ |d   dk\  rJ  y c c}w )Nr   RLIMITr   rx   r`   )resourcer1   r2   r4   r5   dir
startswithr   r   rlimit	getrlimitr   )r9   r   r:   r   namesry   r   rets           r;   test_rlimit_getzTestProcess.test_rlimit_get  s    NN299;'KBq1<<+ABBeu 	$DFD)EA::s8}$$ 7777 xx(*<*<U*CCCChhuo3x1}$}1v|#|1v|#|	$ Cs   DDc                    | j                         }|j                  t        j                  d       |j                  t        j                        dk(  sJ t        rRt        j                  t        d      5  t        j                  j                  d      j                  d       d d d        t        j                  t              5  |j                  t        j                  d       d d d        y # 1 sw Y   LxY w# 1 sw Y   y xY w)N)ra   ra   zcan't use prlimitr   r   )ra   ra   ra   )
r?   r   r1   RLIMIT_NOFILEr   r%   r6   rz   _psplatformr2   r8   s     r;   test_rlimit_setzTestProcess.test_rlimit_set  s    	%%v.xx,,-777 z1DE 8""**1-44Q78]]:& 	6HHV))95	6 	68 8	6 	6s   6/C0!C<0C9<Dc                 x   t        j                         }| j                         }|j                  t         j                        \  }}	 |j                  t         j                  d|f       t        |d      5 }|j                  d       d d d        t        j                  t              5 }t        |d      5 }|j                  d       d d d        d d d        j                  j                  t        j                  k(  sJ 	 |j                  t         j                  ||f       |j                  t         j                        ||fk(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# |j                  t         j                  ||f       |j                  t         j                        ||fk(  sJ w xY w)N   r   s   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXs  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)r1   r2   r   r   RLIMIT_FSIZEr   r   r%   r6   OSErrorr   errnoEFBIG)r9   r:   testfnsofthardr   excs          r;   test_rlimitzTestProcess.test_rlimit  s`   NN"XXf112
d	AHHV((4,7fd# %q$% w' )3&$' )1GGK()) 99??ekk111HHV((4,788F//0T4L@@@% %
) )) )
 HHV((4,788F//0T4L@@@sU   .E/ 6E!E/ )E#6EE#1E/ EE/ E 	E##E,(E/ /A
F9c                    t        j                         }|j                  t         j                        \  }}	 |j                  t         j                  d|f       |j                  t         j                  t         j                  |f       t        | j                         d      5 }|j                  d       d d d        |j                  t         j                  ||f       |j                  t         j                        ||fk(  sJ y # 1 sw Y   RxY w# |j                  t         j                  ||f       |j                  t         j                        ||fk(  sJ w xY w)Nr   r   s   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)r1   r2   r   r   RLIM_INFINITYr   r   r   )r9   r:   r  r  r   s        r;   test_rlimit_infinityz TestProcess.test_rlimit_infinity  s    NNXXf112
d	AHHV((4,7HHV((6+?+?*FGdoo'. %!$% HHV((4,788F//0T4L@@@	% % HHV((4,788F//0T4L@@@s%   A,D $D6D DD A
Ec                     t        j                         }|j                  t         j                        \  }}|t         j                  k(  sJ |j                  t         j                  ||f       y r>   )r1   r2   r   r   r  )r9   r:   r  r  s       r;   test_rlimit_infinity_valuez&TestProcess.test_rlimit_infinity_value  sT     NNXXf112
dv+++++	$$tTl3rI   serialry   c                 H   t        j                         }t        r	 |j                         }n|j                         }t               5  |j                         }||dz   k(  sJ 	 d d d        y # t         j                  $ r t        j                  d      w xY w# 1 sw Y   y xY w)N$on OpenBSD this requires root accessr`   )r1   r2   r
   num_threadsrZ   r%   r   r   )r9   r:   step1step2s       r;   test_num_threadszTestProcess.test_num_threads  s    
 NNJ MMOE\ 	&MMOEEAI%%%	& 	& && Jkk"HIIJ
	& 	&s   A, B,)BB!zWINDOWS onlyc                 V    t        j                         }|j                         dkD  sJ y r   )r1   r2   num_handlesr8   s     r;   test_num_handleszTestProcess.test_num_handles  s$     NN}}"""rI   c                    t        j                         }t        r	 |j                         }n|j                         }t               5  |j                         }t        |      t        |      dz   k(  sJ |d   }|j                  |d   k(  sJ |j                  |d   k(  sJ |j                  |d   k(  sJ 	 d d d        y # t         j                  $ r t        j                  d      w xY w# 1 sw Y   y xY w)Nr  r`   r   r   )r1   r2   r
   threadsrZ   r%   r   r   r   id	user_timesystem_time)r9   r:   r  r  athreads        r;   test_threadszTestProcess.test_threads  s    NNJ		 IIKE\ 	5IIKEu:Ua///AhG::+++$$
222&&'!*444	5 	5 && Jkk"HIIJ
	5 	5s   B? A.C+?)C(+C4c                    | j                         }t        r	 |j                          t        |j                         j                  t        d |j                         D              z
        dk  sJ t        |j                         j                  t        d |j                         D              z
        dk  sJ y # t        j                  $ r t        j                  d      w xY w)Nr  c              3   4   K   | ]  }|j                     y wr>   )r  .0r   s     r;   	<genexpr>z-TestProcess.test_threads_2.<locals>.<genexpr>+  s     (J(J   r   c              3   4   K   | ]  }|j                     y wr>   )r  r   s     r;   r"  z-TestProcess.test_threads_2.<locals>.<genexpr>/  s     *NQ1==*Nr#  )r?   r
   r  r1   rZ   r%   r   r   r   r   sumr   r8   s     r;   test_threads_2zTestProcess.test_threads_2   s     J		 ""S(Jaiik(J%JJK	
 $$s*N!))+*N'NNO	
 && Jkk"HIIJs   B; ;)C$c                    t        j                         }|j                         d d \  }}|j                         }|dkD  sJ |dkD  sJ d gdz  }|j                         d d \  }}|j                         }||kD  sJ ||k\  sJ ||kD  sJ ~t        rF|j                         }	|	j
                  |	j                  k(  sJ |	j                  |	j                  k(  sJ |j                         }	|	j                  D ]  }
t        |	|
      dk\  rJ  y )Nr   r   i` )r1   r2   memory_infomemory_percentr   rsswsetvmspagefiler   r   )r9   r:   rss1vms1percent1memarrrss2vms2percent2memry   s              r;   test_memory_infozTestProcess.test_memory_info3  s   NN ]]_Ra(
d##%axxaxx '!]]_Ra(
d##% d{{t||("""--/C77chh&&&77cll***mmoKK 	+D3%***	+rI   c                    t        j                         }t        j                         j                  }|j	                         }|j
                  D ].  }t        ||      }|dk\  sJ |dk(  rt        st        r(||k  r.J  t        st        st        r|j                  dk\  sJ t        r#|j                  dk\  sJ |j                  dk\  sJ y y )Nr   r,  )r1   r2   virtual_memorytotalmemory_full_infor   r   r   r   r   r   usspssswap)r9   r:   r9  r5  ry   r   s         r;   test_memory_full_infoz!TestProcess.test_memory_full_infoR  s    NN%%'--  "KK 	"DC&EA::#%E>!>	" Gu77a<<77a<<88q= = rI   c                    t        j                         }|j                         }t        |      t        t	        |            k(  sJ |j                  d      }|D ]W  }|j
                  j                  d      r t        r|j
                  dk(  r6t        j
                  j                  |j
                        sJ |j
                         t        re	 t        j
                  j                  |j
                        s:t        j
                  j                  |j
                        sJ |j
                         dt        j
                  j#                  |j
                        vs	 t        j$                  |j
                        }t%        j&                  |j(                        rIJ |j
                          |D ]Q  }|j,                  D ]@  }t/        ||      }	|dk(  r|d	v r
|	rJ |	       t1        |	t2              sJ |	d
k\  r;J |	        S y # t        $ rN t        s t        d      5 }|j!                         }d d d        n# 1 sw Y   nxY w|j
                   dvr Y w xY w# t*        $ r Y w xY w)NF)grouped[pvclockz/proc/self/smapsz
 (deleted)64r   >   addrpermsr   )r1   r2   memory_mapsr   setr   r   r   r4   isabsr   existsislinkAssertionErrorr   r   r   basenamestatS_ISREGst_modeFileNotFoundErrorr   r   r   int)
r9   r:   mapsext_mapsntr   datastfnamer   s
             r;   test_memory_mapszTestProcess.test_memory_mapsb  s   NN}}4yCD	N***===/ 	=Bww!!#&rww)+77==)22772)77>>"''2bggnn7 ww  RWW--bgg66=)B  <<

3<RWW<3;	=>  		-B -E*F?-- '%'5%eS111 A:,u,:-		-' &  "#56 (! vvx( ( (''*-T9 : ) s=   A#H$I'I$(I9	I$II$#I$'	I43I4c                     t        j                         }t               5 }d }|j                         D cg c]  } ||j                         }} ||      |v sJ 	 d d d        y c c}w # 1 sw Y   y xY w)Nc                 z    t         j                  j                  t         j                  j                  |             S r>   )r4   r   r   normcaser:   s    r;   normpathz8TestProcess.test_memory_maps_lists_lib.<locals>.normpath  s&    ww''(8(8(;<<rI   )r1   r2   r!   rF  r   )r9   r:   r   r]  r   libpathss         r;   test_memory_maps_lists_libz&TestProcess.test_memory_maps_lists_lib  ss     NN " 	.d= 34--/BQ(BHBD>X---	. 	.
 C	. 	.s   A+A&A+&A++A4c                    t        j                         }|j                          t        j                  t
              5  |j                  d       d d d        t        st        st        r|j                  d       y y # 1 sw Y   /xY w)Nz?!?)memtyper;  )	r1   r2   r)  r%   r6   rz   r   r   r   r8   s     r;   test_memory_percentzTestProcess.test_memory_percent  si    NN	]]:& 	,U+	,EWU+ %	, 	,s   A??Bc                     | j                         }|j                         sJ |j                         sJ |j                          |j                          |j                         rJ |j                         rJ y r>   )r?   
is_runningr@   rA   r8   s     r;   test_is_runningzTestProcess.test_is_running  s^    ||~~||~~		<<>!!<<>!!>rI   c                    | j                         }|j                         }	 |t        k(  sJ 	 t        |ddg      }|dk(  sJ y # t        $ r t        rLt        |      t        t              k(  r1t        j                  j                  } ||       |t              k(  sgJ t        j                  d    dt        j                  d    }	 |j                  |d      t        j                  |d      k(  sJ n# t        $ r Y nw xY wY w xY w)Nr   .r`    r]   zimport os; print('hey')hey)r?   exer   rK  r   r   r4   r   r[  sysversion_inforeplacer)   )r9   r:   rj  r[  verouts         r;   test_exezTestProcess.test_exe  s    eeg	*$$$( #t678e||)  	3s8s:677++}(<<<< ))!,-Qs/?/?/B.CD;;sB/:3E3Ec23NNNN% 	s6   A BD	+C54D5	D>D DDDc                    t         ddg}| j                  |      }t        r(|j                         g k(  rt	        j
                  d      t        st        st        r|j                         d   t         k(  sJ y t        r\t        rV|j                         d   }|t         k7  r:dj                  |j                         dd        dj                  |dd        k(  sJ y dj                  |j                               dj                  |      k(  sJ y )Nr]   2import time; [time.sleep(0.1) for x in range(100)]OPENBSD: returned EBUSYr    r`   )r   r?   r	   cmdliner%   r   r
   r   r   r   join)r9   ru  r:   pyexes       r;   test_cmdlinezTestProcess.test_cmdline  s    @

 g&aiikR'++788 W99;q>Z///		AJ&88AIIKO48MMMM88AIIK(CHHW,====rI   c                    t         g}|j                  dgdz         |j                  ddg       | j                  |      }|dd  }t        r	 |j	                         dd  |k(  sJ y |j	                         dd  }t        r|g k(  rt        j                  d      ||k(  sJ y # t
        j                  $ r t        j                  d      w xY w)Nz-v2   r]   rr  r`   z#OPENBSD: process turned into zombiers  )
r   extendr?   r
   ru  r1   ZombieProcessr%   r   r	   )r9   ru  r:   r   s       r;   test_long_cmdlinezTestProcess.test_long_cmdline  s    ,v{#GH	
 g& !"+Iyy{12'111 ))+ab/C#)kk";<<'>!> '' Ikk"GHHIs   B! !)C
c                 D   | j                         }|j                         j                         }t        j                  j                  t        j                  j                  t        j                              j                         }|j                  |      s	J ||f       y r>   )
r?   ry   lowerr4   r   rL  r   rk  
executabler   )r9   r:   ry   rw  s       r;   	test_namezTestProcess.test_name   so    vvx~~  !1!1#..!ABHHJ%4t}4%rI   c                 >   t        | j                  t        j                  dz              }|ddg}| j	                  |      }t
        r4	 |j                         t        j                  j                  |      k(  sJ y |j                         t        j                  j                  |      k(  sJ y # t        $ rc |j                         t        j                  k(  r>t        j                  j                  |      j                  |j                               sJ  Y y w xY w)Nr   )suffixr]   rr  )r#   r   stringdigitsr?   r
   ry   r4   r   rL  rK  statusr1   STATUS_ZOMBIEr   )r9   rw  ru  r:   s       r;   test_long_namezTestProcess.test_long_name  s    dooV]]Q5FoGH@

 g&vvx277#3#3E#:::: 668rww//6666 " 88:!5!5577++E2==affhGGG Hs   
2B0 0A)DDc                 (   t        j                         }|j                         \  }}}|t        j                         k(  sJ |t        j
                         k(  sJ t        t        d      r(t        j                         |j                         k(  sJ y y N	getresuid)r1   r2   uidsr4   getuidgeteuidhasattrr  r9   r:   real	effective_saveds        r;   	test_uidszTestProcess.test_uids!  s    NN"#&&(iryy{"""BJJL((( 2{#<<>QVVX--- $rI   c                 (   t        j                         }|j                         \  }}}|t        j                         k(  sJ |t        j
                         k(  sJ t        t        d      r(t        j                         |j                         k(  sJ y y r  )r1   r2   gidsr4   getgidgetegidr  	getresgidr  s        r;   	test_gidszTestProcess.test_gids.  r  rI   c                 f   fd}t        j                         t        j                  t              5  j                  d       d d d        j                         }| j                  ||       t        rd }t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  fD ]  }| j                  |      5  	 j                  |       j                         }|t         j                  t         j                  t         j                  hv r||k(  s||}||k(  s	J ||k(  sJ d d d         y 	 t!        t"        d      rIt#        j$                  t"        j&                  t#        j(                               j                         k(  sJ j                  d       j                         dk(  sJ t!        t"        d      rIt#        j$                  t"        j&                  t#        j(                               j                         k(  sJ t*        s'j                  d       j                         dk(  sJ y y # 1 sw Y   "xY w# t         j                  $ r Y 5w xY w# 1 sw Y   xY w# t         j                  $ r Y y w xY w)Nc                 \    	 j                  |        y # t        j                  $ r Y y w xY wr>   )nicer1   rZ   )r   r:   s    r;   r   z&TestProcess.test_nice.<locals>.cleanup<  s+    t&& s    ++str)priogetpriorityr`   r   )r1   r2   r%   r6   r   r  r   r   IDLE_PRIORITY_CLASSBELOW_NORMAL_PRIORITY_CLASSNORMAL_PRIORITY_CLASSABOVE_NORMAL_PRIORITY_CLASSHIGH_PRIORITY_CLASSREALTIME_PRIORITY_CLASSsubTestrZ   r  r4   r  PRIO_PROCESSr5   r   )r9   r   r   highest_prior  new_prior:   s         @r;   	test_nicezTestProcess.test_nice;  s>   	 NN]]9% 	FF5M	vvx&L**22,,22**.. 4 \\t\, 44t $%668
  ">>"66"::$ 
  (4/<3G/3'/<'? ?'?#+t#33#3)4 44<2}-r		D668$$ q	vvx1}$}2}-r		D668$$
 FF1I668q=(= i	 	$ ".. 4 4P && sO   I&)J+I3<AJ DJ &I03J
J	J

JJ	J0/J0c                 r    t        j                         }|j                         t         j                  k(  sJ y r>   )r1   r2   r  STATUS_RUNNINGr8   s     r;   test_statuszTestProcess.test_status}  s(    NNxxzV22222rI   c                    | j                         }|j                         }t        r|j                  d      \  }}t	        j
                         }|j                  d      rt        j                  d      ||k(  sJ dt        j                  v r|t        j                  d   k(  sJ y y |t	        j
                         k(  sJ y )N\$zrunning as service account
USERDOMAIN)r?   usernamer   splitgetpassgetuserendswithr%   r   r4   environ)r9   r:   r  domaingetpass_users        r;   test_usernamezTestProcess.test_username  s    ::<'~~d3FH"??,L$$S) kk">??|+++rzz)L!9999 * w0000rI   c                 r    | j                         }|j                         t        j                         k(  sJ y r>   )r?   cwdr4   getcwdr8   s     r;   test_cwdzTestProcess.test_cwd  s*    uuw"))+%%%rI   c                 V    t         ddg}| j                  |      t        fd       y )Nr]   zFimport os, time; os.chdir('..'); [time.sleep(0.1) for x in range(100)]c                       j                         t        j                  j                  t        j                               k(  S r>   )r  r4   r   dirnamer  r\  s   r;   <lambda>z(TestProcess.test_cwd_2.<locals>.<lambda>  s%    1557bggoobiik&BB rI   )r   r?   r    )r9   rd   r:   s     @r;   
test_cwd_2zTestProcess.test_cwd_2  s0    	
 c"BCrI   c           	      `   t        j                         }|j                         }|sJ |       | j                  |j                  |       t	        t
        d      r-|t        t        j                  |j                              k(  sJ t        |      t        t        |            k(  sJ t        t        t        t        j                  d                        }|D ]  }|j                  |g       |j                         |gk(  sJ t	        t
        d      r;|j                         t        t        j                  |j                              k(  sJ t	        |d      s|j                         d   |j                         k(  rJ  |j                  g        t        r-|j                         |j                  j!                         k(  sJ |j                         |k(  sJ t	        t
        d      r;|j                         t        t        j                  |j                              k(  sJ t#        j$                  t&              5  |j                  d       d d d        |j                  |       |j                  t        |             |j                  t)        |             y # 1 sw Y   OxY w)Nsched_getaffinityTpercpunum_cpur   r`   )r1   r2   cpu_affinityr   r  r4   listr  r3   r   rG  r   r   r  r   _proc_get_eligible_cpusr%   r6   r   r   )r9   r:   initialall_cpusns        r;   test_cpu_affinityzTestProcess.test_cpu_affinity  s   NN.."w02*+d2#7#7#>????7|s3w<0000c&"4"4D"ABCD 	:ANNA3>>#s***r./~~'40D0DQUU0K+LLLLq)$~~'*aiik999	: 	
r>>#qww'A'A'CCCC>>#x///2*+>>#tB,@,@,G'HHHH]]9% 	NN1		w	s8}%	uX'	 	s   J$$J-c                    | j                         }t        t        j                  d            dz   g}t	        j
                  t              5  |j                  |       d d d        t	        j
                  t              5  |j                  t        dd             d d d        t	        j
                  t        t        f      5  |j                  ddg       d d d        t	        j
                  t              5  |j                  ddg       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   WxY w# 1 sw Y   y xY w)	NTr  
   i'  i*  r   1rx   )
r?   r   r1   r   r%   r6   rz   r  r   r   )r9   r:   invalid_cpus      r;   test_cpu_affinity_errsz"TestProcess.test_cpu_affinity_errs  s    6++489B>?]]:& 	(NN;'	(]]:& 	0NN5./	0]]Iz23 	%NNAs8$	%]]:& 	$NNAr7#	$ 	$	( 	(	0 	0	% 	%	$ 	$s0   D D!D-8D9D!D*-D69Ec                    t        j                         }|j                         }|sJ |       | j                  |j                  |       t	        |      dkD  r|d d }g }t        t	        |      dz         D ].  }|j                  d t        j                  ||      D               0 |D ]:  }|j                  |       t        |j                               t        |      k(  r:J  y )N   r`   c              3   6   K   | ]  }|rt        |        y wr>   )r  )r!  subsets     r;   r"  zATestProcess.test_cpu_affinity_all_combinations.<locals>.<genexpr>  s       Vs   )
r1   r2   r  r   r   r   r{  	itertoolscombinationssorted)r9   r:   r  combosr   combos         r;   "test_cpu_affinity_all_combinationsz.TestProcess.test_cpu_affinity_all_combinations  s    NN.."w0 w<"crlGs7|a'( 	AMM '44Wa@ 	  	=ENN5!!..*+ve}<<<	=rI   zbroken on BSDc                    t        j                         | j                         }j                         |vsJ t	        |d      5 }|j                  d       |j                          t        fd       j                         D cg c]+  }t        j                  j                  |j                        - }}t        j                  j                  |      |v sJ t        r(D ]#  }|j                  |k(  s|j                  dk(  r#J  d d d        D ]2  }t        j                  j                  |j                        r-J |        d| d}| j                  t        d|g      t!        d      D ]a  }j                         D cg c]+  }t        j                  j                  |j                        - }}||v r n:t#        j$                  d	       c t        j                  j                  |      v sJ |D ](  }t        j                  j                  |      r#J |        y c c}w # 1 sw Y   $xY wc c}w )
Nr   s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc                  N    t        j                               t               k7  S r>   )r   
open_files)filesr:   s   r;   r  z-TestProcess.test_open_files.<locals>.<lambda>  s    s1<<>2c%j@ rI   r   zimport time; f = open(r'z/', 'r'); [time.sleep(0.1) for x in range(100)];r]   r   rp   )r1   r2   r   r  r   r   flushr    r4   r   r[  r   positionisfiler?   r   r   r}   sleep)	r9   r  r   r   	filenamesfileru  r  r:   s	          @@r;   test_open_fileszTestProcess.test_open_files  s   NN"U"""&$ 	51GGK GGI@ALLNE;@Aa))!&&1AIA77##F+y888! 5DyyF*#}}4445	5  	3D77>>$)),2d2,	3
 'vh /  	 z49:s 	9A;<<<>Ja))!&&1JIJ"JJt		9 77##F+y888 	.D77>>$'--'	./ B	5 	5. Ks1   	AH30H.>?H3>H3H30I .H33H=c                 .   t        j                         }t        j                  j                  }| j                         }t        |d      5 }|j                         D ]F  } ||j                         ||j                        k(  s|j                  |j                         k(  sF n' t        j                  d|j                                ||j                         ||j                        k(  sJ t        r|j                  dk(  s!J |j                  |j                         k(  sJ |j                         d   }|d   |j                  k(  sJ |d   |j                  k(  sJ |j                  |j                         vsJ 	 d d d        y # 1 sw Y   y xY w)Nwzno file found; files=rx   r   r`   )r1   r2   r4   r   r[  r   r   r  ry   fdfilenor%   r~   r   )r9   r:   r[  r  fileobjr  ntuples          r;   test_open_files_2zTestProcess.test_open_files_2  sS    NN77##"&# 	6' NTYY'8GLL+AAww'.."22N kk$9!,,.9K"LMMDII&(7<<*@@@@ww"}$}ww'.."2222\\^A&F!9+++!9		)))<<q||~555'	6 	6 	6s   AF"CFFc                    t        j                         }| j                         }|j                         }t	        |d      5  |j                         |dz   k(  sJ t        j
                         5  |j                         |dz   k(  sJ 	 d d d        d d d        |j                         |k(  sJ y # 1 sw Y   'xY w# 1 sw Y   +xY w)Nr  r`   r   )r1   r2   r   num_fdsr   socket)r9   r:   r  starts       r;   test_num_fdszTestProcess.test_num_fds/  s     NN"		&# 	099;%!)+++ 0yy{eai///0	0 yy{e###0 0	0 	0s$   -B:.B.B:.B7	3B::Cz not reliable on OPENBSD & NETBSDc                    t        j                         }t        |j                               }t	        d      D ]7  }t        j                  d       t        |j                               }||kD  s7 y  t        j                  d      )Nr   g?z2num ctx switches still the same after 2 iterations)	r1   r2   r%  num_ctx_switchesr   r}   r  r%   r~   )r9   r:   beforer   afters        r;   test_num_ctx_switchesz!TestProcess.test_num_ctx_switches;  sq    
 NNQ'')*q 	AJJt**,-Ev~		
 kkNOOrI   c                    t        j                         }t        t        d      r'|j	                         t        j
                         k(  sJ | j                         }|j	                         t        j                         k(  sJ y )Ngetppid)r1   r2   r  r4   ppidr  r?   r5   r8   s     r;   	test_ppidzTestProcess.test_ppidI  sZ    NN2y!668rzz|+++vvx299;&&&rI   c                     | j                         }|j                         j                  t        j                         k(  sJ t        j                         d   }t        j                  |      j                         J y r   )r?   parentr3   r4   r5   r1   pidsr2   )r9   r:   
lowest_pids      r;   test_parentzTestProcess.test_parentP  s\    xxz~~,,,[[]1%
~~j)002:::rI   c                     | j                         }|j                          |j                  sJ d|_        |j                         j                  t        j                         k(  sJ y Nr`   )r?   r   _create_timer  r3   r4   r5   r8   s     r;   test_parent_mocked_ctimez$TestProcess.test_parent_mocked_ctimeW  sL     	~~~xxz~~,,,rI   c                     t        j                         }| j                         \  }}|j                         |k(  sJ |j                         |k(  sJ y r>   )r1   r2   rq   r  r9   r  rr   rs   s       r;   test_parent_multizTestProcess.test_parent_multic  sL    ! 446z  "e+++||~'''rI   c                    t        j                         }|j                         sJ | j                         \  }}|j                         d   |k(  sJ |j                         d   |k(  sJ |j                         d   |k(  sJ y r   )r1   r2   parentsrq   r  s       r;   test_parentszTestProcess.test_parentsi  s    !~~ 446z}}q!V+++!!#A&%///!!#A&&000rI   c                    t        j                         }|j                         rJ |j                  d      rJ | j                  d      }|j                         }|j                  d      }||fD ]R  }t	        |      dk(  sJ |d   j
                  |j
                  k(  sJ |d   j                         |j
                  k(  rRJ  y )NT	recursiver   creationflagsr`   )r1   r2   childrenr?   r   r3   r   r9   r  rr   	children1	children2r  s         r;   test_childrenzTestProcess.test_childrenr  s    !??$$$??T?222 !!!2OO%	OOdO3	"I. 	4Hx=A%%%A;??eii///A;##%333	4rI   c                    t        j                         }|j                          |j                  sJ |xj                  dz  c_        |j	                         rJ |j	                  d      rJ | j                  d      }|j	                         }|j	                  d      }||fD ]R  }t        |      dk(  sJ |d   j                  |j                  k(  sJ |d   j                         |j                  k(  rRJ  y )Nr   Tr  r   r  r`   )	r1   r2   r   r	  r  r?   r   r3   r   r  s         r;   test_children_mocked_ctimez&TestProcess.test_children_mocked_ctime  s     !""""v%??$$$??T?222 !!!2OO%	OOdO3	"I. 	4Hx=A%%%A;??eii///A;##%333	4rI   c                    t        j                         }| j                         \  }}|j                         |gk(  sJ |j                  d      ||gk(  sJ |j	                          |j                          |j                  d      rJ y )NTr  )r1   r2   rq   r  rK   rA   r  s       r;   test_children_recursivez#TestProcess.test_children_recursive  s     ! 446z UG+++.5*2EEEE 	

??T?2222rI   c                    t        j                  t              }t        j                         D ]  }	 ||j                         xx   dz  cc<     t        |j                         d       d   }t        r|dk(  rt        j                  d      t        j                  |      }	 |j                  d      }t        |      t        t        |            k(  sJ y # t        j                  $ r Y w xY w# t        j                   $ r Y y w xY w)Nr`   c                     | d   S r   )r   s    r;   r  z6TestProcess.test_children_duplicates.<locals>.<lambda>  s
    qt rI   )keyr   zPID 0Tr  )collectionsdefaultdictrQ  r1   process_iterr   Errormaxitemsr   r%   r   r2   r  r   rG  rZ   )r9   tabler:   r3   cs        r;   test_children_duplicatesz$TestProcess.test_children_duplicates  s    '',$$& 	Aaffh1$	 %++-^4Q7SAX++g&&NN3	)

T
*A q6SQ[((( <<  "" 		s#   C$C2 C/.C/2DDc                    t        j                         }| j                         \  }}|j                  d      }t	        |      dk(  sJ |d   |k(  sJ |d   |k(  sJ |j                         }|d   |k(  sJ |d   |k(  sJ y )NTr  r   r   r`   )r1   r2   rq   r  r   r  )r9   r  rr   rs   r  r  s         r;   test_parents_and_childrenz%TestProcess.test_parents_and_children  s    ! 446z??T?28}!!!{e###{j((($$&qzU"""qzV###rI   c                 :   | j                         }|j                          t        d      D ]:  }|j                         t        j
                  k(  r nt        j                  d       < |j                          |j                         t        j
                  k7  sJ y )Nr   rp   )	r?   rl   r   r  r1   STATUS_STOPPEDr}   r  rm   )r9   r:   r   s      r;   test_suspend_resumezTestProcess.test_suspend_resume  st    			s 	AxxzV222JJt	 	

xxzV22222rI   c                    t        j                  t              5  t        j                  d       d d d        t        j                  t
              5  t        j                  d       d d d        y # 1 sw Y   AxY w# 1 sw Y   y xY w)Nr  rx   )r%   r6   r   r1   r2   rz   )r9   s    r;   test_invalid_pidzTestProcess.test_invalid_pid  sa    ]]9% 	 NN3	 ]]:& 	NN2	 		  	 	 	s   A0A<0A9<Bc                    t        j                         }|j                  ddg      }t        |j	                               ddgk(  sJ t        j                  t        t        j                                     }|j                  dgd      }t        |d   t              s
|d   dk(  sJ t        j                  ddt         j                  	      5  |j                  d
gd      d
dik(  sJ 	 d d d        t        j                  ddt        j                  |j                  d      	      5  t        j                  t         j                        5  |j                  d
g       d d d        d d d        t        j                  ddt        j                   |j                  d      	      5  |j                  d
gd      d
dik(  sJ 	 d d d        t        j                  ddt"        	      5  |j                         }d
t        |j	                               vsJ t        j                  t"              5  |j                  d
g       d d d        d d d        t        j                  t$              5  |j                  d       d d d        t        j                  t&              5  |j                  dg       d d d        t        j                  t&              5  |j                  ddg       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   UxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nrj  ry   )attrsnet_connectionsfoo)r4  ad_valuezpsutil.Process.niceT)createrU   r  r`   bar)r1   r2   as_dictr  keysminr  r   r  r   rV   rZ   rX   r3   r%   r6   r|  NotImplementedErrorr   rz   )r9   r:   ds      r;   test_as_dictzTestProcess.test_as_dict  s   NNIIUFOI,affhE6?222NN3v{{}-.II./%I@!-.5&'5000 ZZ!$F<O<O
 	H 99F8a98VQKGGG	H ZZ!,,QUUF;
 	*
 v334 *			)*	* ZZ!,,QUUF;
 	P
 99F8e9<OOO	P ZZ!$<O
 	* 		Aaffh///23 *			)*	* ]]9% 	IIf	]]:& 	IIug	]]:& 	&IIuen%	& 	&M	H 	H* *	* 	*	P 	P* *	* 	*	 		 		& 	&s   K2+$LK?#L)L*AL21L&L2.L>!M
M2K<?L		LLL#&L/	+L22L;>M
MMc                    t        j                         }t        j                  d      5 }|j	                         5  |j                          |j                          d d d        |j                  dk(  sJ 	 d d d        t        j                  d      5 }|j                          |j                          d d d        j                  dk(  sJ y # 1 sw Y   sxY w# 1 sw Y   exY w# 1 sw Y   3xY w)N$psutil._psplatform.Process.cpu_timesr`   r   r1   r2   r   rV   oneshotr   
call_countr9   r:   r   s      r;   test_oneshotzTestProcess.test_oneshot  s    NNZZ>? 	%1  <<1$$$		% ZZ>? 	1KKMKKM	 ||q    	% 	%	 	s.   C!CC!C&C	CC#&C/c           	         t        j                         }t        j                  d      5 }t        j                  d      5 }|j	                         5  |j                          |j                          |j	                         5  |j                          |j                          d d d        d d d        |j                  dk(  sJ |j                  dk(  sJ 	 d d d        d d d        t        j                  d      5 }|j                          |j                          d d d        j                  dk(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w# 1 sw Y   }xY w# 1 sw Y   KxY w)NrA  z(psutil._psplatform.Process.oneshot_enterr`   r   rB  )r9   r:   m1m2r   s        r;   test_oneshot_twicezTestProcess.test_oneshot_twice  s*    NNZZ>? 		*2FG *2YY[ &KKMKKM &&& }})))}})))*		* ZZ>? 	1KKMKKM	 ||q   & && &* *		* 		*	 	s_   E E1E!D6	#E+*EE;!E&6D?;EEEE	EE#&E/c                    | j                         \  }}|j                         }|j                         }||k7  sJ |j                         5  |j                         |k(  sJ |j                         |k(  sJ 	 d d d        |j                         5  |j                         |k(  sJ |j                         |k(  sJ 	 d d d        y # 1 sw Y   NxY w# 1 sw Y   y xY wr>   )rq   r   rC  )r9   p1p2p1_ppidp2_ppids        r;   test_oneshot_cachezTestProcess.test_oneshot_cache,  s     ))+B'')'')'!!!ZZ\ 	(779'''779'''	( ZZ\ 	(779'''779'''	( 	(	( 	(	( 	(s   +C+CCCc                 $   d }| j                         j                          j                          t        rt	        fd       | j                         t              }|j                  |j                        D ]  \  }} |||        y )Nc                     	  |        }t         r|dv ry t        j                  | d|d      # t        j                  $ r  t        j
                  $ r Y y t        j                  $ r t        r|dv rY y  w xY w)N>   rj  ry   z didn't raise NSP and returned z instead>   r  r  )r   r%   r~   r1   r|  rX   rZ   r
   )funfun_namer   s      r;   assert_raises_nspzFTestProcess.test_halfway_terminated_process.<locals>.assert_raises_nspC  s    e x?:kkg<SG8L  '' '' && x+EEs   / &A7A75A7c                  D     j                   t        j                         vS r>   )r3   r1   r  r\  s   r;   r  z=TestProcess.test_halfway_terminated_process.<locals>.<lambda>Z  s    quuFKKM9 rI   )	r?   rK   rA   r   r    rE   r$   iterall)r9   rU  nsrS  ry   r:   s        @r;   test_halfway_terminated_processz+TestProcess.test_halfway_terminated_process;  sw    	& 		9:a q! 	)ICc4(	)rI   c                 L    | j                         \  }}| j                  |       y r>   )spawn_zombieassert_proc_zombie)r9   _parentzombies      r;   test_zombie_processzTestProcess.test_zombie_processa  s"    ++-'rI   c                     t        j                         }t        j                  dt        j                  d            5 }|j                         sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nzpsutil.Processr   rT   )r1   r2   r   rV   r|  rd  r   rE  s      r;   $test_zombie_process_is_running_w_excz0TestProcess.test_zombie_process_is_running_w_excf  s]     NNZZ&*>*>q*A
 	<<>!>88O8		 	 	s   !A**A3c                    t        j                         }t        j                  dt        j                  d            5 }|j                         t         j                  k(  sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nz!psutil._psplatform.Process.statusr   rT   )r1   r2   r   rV   r|  r  r  r   rE  s      r;    test_zombie_process_status_w_excz,TestProcess.test_zombie_process_status_w_excq  sl     NNZZ/,,Q/
 	 88:!5!555588O8	 	 	s   2A;;Bc                 &   | j                         }t        j                  |j                        }|j                  |j	                         dz   f|_        t        t        j                                |j                  t        j                  v sJ |j                         rJ t        j                  j                  t        j                  dd      5  t        j                  t!        j"                               5 }t        t        j                                d d d        d d d        d|j                   j%                         v sJ |j                  t        j                  vsJ |t        j                  |j                        k7  sJ d}t'        |      }|j)                  |j*                  |j,                  z   d      D ]U  \  }}| j/                  |      5  t1        j2                  t        j4                  |	      5   |        d d d        d d d        W d
t7        |      v sJ d
t9        |      v sJ t1        j2                  t        j4                  |	      5  |j;                          d d d        t1        j2                  t        j4                  |	      5  |j=                          d d d        t1        j2                  t        j4                  |	      5  |j?                          d d d        t1        j2                  t        j4                  |	      5  |jA                          d d d        y # 1 sw Y   xY w# 1 sw Y    xY w# 1 sw Y   ExY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   PSUTIL_DEBUGTz+refreshing Process instance for reused PID z4process no longer exists and its PID has been reusedF)clear_cacher  r   zterminated + PID reused)!spawn_subprocr1   r2   r3   r   _identr  r%  _pmaprd  r   rV   object_common
contextlibredirect_stderrioStringIOgetvaluer$   rW  setterskillersr  r%   r6   rX   r  reprr   r  r  r  )r9   subpr:   r   msgrY  rS  ry   s           r;   test_reused_pidzTestProcess.test_reused_pid}  s   !!#NN488$EE1==?S01V  "#uu$$$<<>!! ZZv~~~tD 	,++BKKM: ,aV((*+,	, :!%%Azz|	
 uuFLL(((FNN488,,,,Dq!bjj!8eL 	IC4( ]]6#7#7sC E 	
 )CF222(DG333]]6//s; 	FFH	]]6//s; 	HHJ	]]6//s; 	IIK	]]6//s; 	JJL	 	3, ,	, 	,  	 		 		 		 	sx   (L<8L/L<&M>M	MM#M/M;N/L9	4L<<M	MMM 	#M,/M8;NNc                 J   dt        j                         vrt        j                  t         j                        5  t        j
                  d       d d d        t        j                  d      rJ t        j
                  d      j                         dk(  sJ y t        j
                  d      }t        rt         j                  nt        }t        j                  |      5  |j                          d d d        t        j                  |      5  |j                          d d d        t        j                  |      5  |j                          d d d        t        j                  |      5  |j                          d d d        t        j                  |      5  |j                          d d d        t        j                  |      5  |j!                  t"        j$                         d d d        t'        |      }|j)                  |j*                  |j,                  z         D ]W  \  }}	  |       }|dv r|j.                  dk(  r"J |dk(  r t        rdnd}|j1                         |k(  rGJ |dk(  sO|rRJ |        t2        s0dt        j                         v sJ t        j                  d      sJ y y # 1 sw Y   bxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   mxY w# 1 sw Y   LxY w# 1 sw Y   xY w# t         j                  $ r Y w xY w)Nr   r`   >   r  r  r  zNT AUTHORITY\SYSTEMrootry   )r1   r  r%   r6   rX   r2   
pid_existsr   r   rZ   rz   rA   rK   rl   rm   r@   rN   rB   rC   r$   rW  gettersrr  r  r  r
   )r9   r:   r  rY  rS  ry   r   r   s           r;   
test_pid_0zTestProcess.test_pid_0  s~   FKKM!v334 "q!" ((+++>>!$))+q000NN1%,f!!*]]3 	FFH	]]3 	KKM	]]3 	IIK	]]3 	HHJ	]]3 	FFH	]]3 	*MM&..)	* q!bjj!89 	&IC&e ++88q=(=Z'5<1&D::<4///V^%%4	& %%%$$Q''' O" "	 		 		 		 		 		* 	* && se   J0J=K
:K(K$K1 K>&L0J:=K
KK!$K.1K;>LL"!L"c                     d }d | _         t        j                         } ||j                               } |t        j                  j                               }t        st        r||k(  sJ y y y )Nc           	      B   g d}t         r|j                  g d       |D ]  }| j                  |d         | j                         D ci c]H  \  }}|j	                  dd      j	                  dd      |j	                  dd      j	                  dd      J c}}S c c}}w )N)PLATHOMEPYTEST_CURRENT_TESTPYTEST_VERSION)__CF_USER_TEXT_ENCODINGVERSIONER_PYTHON_PREFER_32_BITVERSIONER_PYTHON_VERSIONr  rh  
)r   r{  popr(  rm  )r>  excludery   kvs        r;   
clean_dictz,TestProcess.test_environ.<locals>.clean_dict  s    OG      "dD!" GGI	 Aq 		$#++D"5IIdB'//b9:  s   
AB)maxDiffr1   r2   r  r4   copyr   r   )r9   r  r:   d1d2s        r;   test_environzTestProcess.test_environ  sX    	$ NN		$

)*~8O8 &srI   z<macOS 11+ can't get another process environment, issue #2084z(sometimes fails on `assert is_running()`c                 t   t        j                  d      }t        | j                         |      }| j	                  |gt
        j                  t
        j                        }t        j                  |j                        }t        |j                         |j                         sJ |j                  j                         dk(  sJ t        rt        r	 |j!                         }n|j!                         }|dddk(  sJ |j%                          |j&                  dk(  sJ y # t        j"                  $ r Y y w xY w)	Na  
            #include <unistd.h>
            #include <fcntl.h>

            char * const argv[] = {"cat", 0};
            char * const envp[] = {"A=1", "X", "C=3", 0};

            int main(void) {
                // Close stderr on exec so parent can wait for the
                // execve to finish.
                if (fcntl(2, F_SETFD, FD_CLOEXEC) != 0)
                    return 0;
                return execve("/bin/cat", argv, envp);
            }
            )c_code)stdinr_   rI   r  3)ACr   )textwrapdedentr"   r   rh  rb   rc   r1   r2   r3   r,   rd  r_   r   r   r   r  rZ   communicate
returncode)r9   rG   cexesprocr:   envs         r;   test_weird_environzTestProcess.test_weird_environ  s        DOO-d;""F*//*// # 
 NN599%QUU||~~||  "c)))Ziik ))+CCc****1$$$ &&  s   D! !D76D7N)i__name__
__module____qualname____doc__r<   rH   rL   rP   r%   markskipifr   r[   re   r	   rn   rv   r{   r   r   r   r   r   r   r   r   r   r   r+   r   r   r   r   r   r   r   r   r   r  r	  r  xdist_groupr  r  r   r  r(   r*   r   r&  r6  r>  r   rX  r_  rb  re  rp  rx  r}  r  r  r  r  r  r  r  r  r  r   r  r  r  r   r  r  r  r
   r  r  r  r
  r  r  r  r  r  r+  r-  r0  r2  r?  rF  rJ  rP  rZ  r`  rb  rd  rw  r|  r   r  r   r  r!  rI   r;   r.   r.   H   s   )!!	! [[E	+6
# 7
#!6 [['89. :.2/.!(	'
L. [[,,_E8 F8L [[E	,7	' 8	' [[00IU+$ , J$L [[J?[[E	,7) 8 @)V [[J?[[?  - @-4 [[J?$ @$. [[J?
6 @
6 [[J?A @A$ [[J?A @A [[J?	4 @	4 [[(+& ,&" [[GN;# <#
 [[K@5 A5& 5)[[K@
 A * 
  + +<!  [[O+OD.- E.-` [[O+OD	. E	.,"6>6"45 7 74 [[E	,7
. 8
. [[E	,7
. 8
.@D31"&
D [[,,_E$( F$(L [[,,_E
$ F
$ [[,,_E= F=, [[O4#. 5#.L [[O46 564 [[E	,7[[(+$ , 8$ U+[[6"D  P ,P';
-( 1 14403)($32&h!!(($)L [[E	,7( 8( [[E	,7 8 [[E	,7	 8	'R,(\ [[K@ A4 [[K@[[E	,7[[M   [[A  %%	 8 A%%rI   r.   c                       e Zd ZdZed        Zej                  j                  e	xr e
d      d        Zd Zd Zd Zy	)
	TestPopenzTests for psutil.Popen class.c                     t                y r>   r&   )clss    r;   tearDownClasszTestPopen.tearDownClass(  s    rI   zhangs on OSX + CIrQ   c                 X   t         ddg}t        j                  |t        j                  t        j                  t
              5 }|j                          |j                          |j                   t        |      sJ t        j                  t              5  |j                   d d d        |j                          d d d        t        r&j!                  d      t"        j$                   k(  sJ y j!                  d      t"        j$                  k(  sJ y # 1 sw Y   rxY w# 1 sw Y   fxY w)Nr]   3import time; [time.sleep(0.1) for x in range(100)];stdoutr_   r  ra   )r   r1   Popenrb   rc   r   ry   r   r  r   r%   r6   r7   r6  rK   r   rA   rB   rC   r9   rd   procs      r;   	test_misczTestPopen.test_misc,  s     A

 \\????	
 	
 IIKNNJJt99~. NN	 99Q<FNN?22299Q<6>>111 	 	s%   AD D#D D	D  D)c                    t        j                  t        dgt        j                  t        j                  t        j                  t
              5 }|j                          d d d        j                  j                  sJ |j                  j                  sJ |j                  j                  sJ |j                  dk(  sJ y # 1 sw Y   cxY w)Nz-V)r  r_   r  r  r   )r1   r  r   rb   rc   r   r  r  closedr_   r  r  )r9   r  s     r;   test_ctx_managerzTestPopen.test_ctx_managerH  s    \\????//
 	 	 {{!!!!{{!!!!zz    !###	 	s   CCc                 ,   t         ddg}t        j                  |t        j                  t        j                  t
              5 }|j                          |j                          t        j                  t        j                        5  |j                          d d d        t        j                  t        j                        5  |j                          d d d        t        j                  t        j                        5  |j                  t        j                         d d d        t        rt        j                  t        j                        5  |j                  t        j                          d d d        t        j                  t        j                        5  |j                  t        j"                         d d d        d d d        y # 1 sw Y   6xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   DxY w# 1 sw Y   y xY wNr]   r  r  )r   r1   r  rb   rc   r   rK   rA   r%   r6   rX   r@   rN   rB   rC   r   CTRL_C_EVENTCTRL_BREAK_EVENTr  s      r;   test_kill_terminatezTestPopen.test_kill_terminateV  s{   
 A

 \\????	
 	>
 NNIIKv334 ! !v334 		v334 1  01]]6#7#78 :$$V%8%89:]]6#7#78 >$$V%<%<=>#	> 	>! ! 1 1: :> >#	> 	>s   AH
G+H
G+H
? G&1H
 G20+H
 G>;H
G	H
G#	H
&G/	+H
2G;	7H
>H	H

Hc                 f   t         ddg}t        j                  |t        j                  t        j                  t
              5 }|j                          |j                          t        j                  t              5  |j                   d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wr  )r   r1   r  rb   rc   r   rK   rA   r%   r6   r7   r6  r  s      r;   test__getattribute__zTestPopen.test__getattribute__s  s    A

 \\????	
 		
 NNIIK~. 		 		 		 		s$   :B'=B
B'B$	 B''B0N)r  r  r  r  classmethodr  r%   r  r  r   r   r  r  r  r  r!  rI   r;   r  r  %  sU    '  [[0.9LM2 N26$>:rI   r  )>r  r#  rm  r   r  ro  r  r4   rB   r  rM  r  rb   rk  r  r}   unittestr   r1   r   r   r   r   r	   r
   r   r   r   psutil._commonr   psutil.testsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r'   r(   r)   r*   r+   r,   r.   r  r!  rI   r;   <module>r     s    &     	  	      
              $ # ' ' ) $ # ( ) - # $ %  # ' ' # # , % & *  & )  . 0 %U%. U%z.] ]rI   