
    ;^h                        S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKrSSKrSSKrSSKrSSKJr  SSKrSSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJ r   SSKJ!r!  SSKJ"r"  SSKJ#r#  SSKJ$r$  SSKJ%r%  SSKJ&r&  SSKJ'r'  SSKJ(r(  SSKJ)r)  SSKJ*r*  SSKJ+r+  SSKJ,r,  SSKJ-r-  SSKJ.r.  SSKJ/r/  SSKJ0r0  SS KJ1r1  SS!KJ2r2  SS"KJ3r3  SS#KJ4r4  SS$KJ5r5  SS%KJ6r6  SS&KJ7r7  SS'KJ8r8  SS(KJ9r9  SS)KJ:r:  SS*KJ;r;   " S+ S,\.5      r< " S- S.\.5      r=g)/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                   2   \ rS rSrSrS rS rS rS rS r	\
R                  R                  \(       + SS	9S
 5       rS r\
R                  R                  \SS	9S 5       rS rS rS rS rS rS rS r\
R                  R                  \(       + SS	9S 5       rS r\
R                  R                  \(       + SS	9S 5       r\
R                  R                  \(       + SS	9\" \S9S 5       5       r \
R                  R                  \!(       + SS	9\
R                  R                  \(       + SS	9S 5       5       r"\
R                  R                  \!(       + SS	9\
R                  R                  \#(       + SS	9S 5       5       r$\
R                  R                  \%(       + SS	9S  5       r&\
R                  R                  \%(       + SS	9S! 5       r'\
R                  R                  \%(       + SS	9S" 5       r(\
R                  R                  \%(       + SS	9S# 5       r)\
R                  R                  \%(       + SS	9S$ 5       r*S% r+\
R                  R                  \#(       + S&S	9S' 5       r,\
R                  R                  \-(       + SS	9S( 5       r.\/" 5       \0" \1S9\
R                  R                  \-(       + SS	9S) 5       5       5       r2\/" 5       S* 5       r3S+ r4\
R                  R                  \5(       + SS	9S, 5       r6\
R                  R                  \5(       + SS	9S- 5       r7S. r8S/ r9S0 r:S1 r;\
R                  R                  \<S2S	9S3 5       r=S4 r>\
R                  R                  \<S5S	9S6 5       r?\
R                  R                  \(       + SS	9S7 5       r@\
R                  R                  \(       + SS	9S8 5       rAS9 rBS: rCS; rDS< rES= rF\
R                  R                  \G(       + SS	9S> 5       rH\
R                  R                  \G(       + SS	9S? 5       rI\
R                  R                  \G(       + SS	9S@ 5       rJ\
R                  R                  \KSAS	9SB 5       rL\
R                  R                  \KSAS	9SC 5       rM\
R                  R                  \(       + SS	9SD 5       rN\" \S9\
R                  R                  \O=(       d    \SES	9SF 5       5       rPSG rQSH rRSI rS\/" 5       SJ 5       rTSK rUSL rVSM rWSN rXSO rYSP rZSQ r[SR r\SS r]ST r^SU r_\
R                  R                  \(       + SS	9SV 5       r`\
R                  R                  \(       + SS	9SW 5       ra\
R                  R                  \(       + SS	9SX 5       rbSY rcSZ rd\
R                  R                  \e(       + SS	9S[ 5       rf\
R                  R                  \e(       + SS	9\
R                  R                  \(       + SS	9\
R                  R                  \gS\S	9\
R                  R                  \S]S	9S^ 5       5       5       5       rhS_rig`)aTestProcessI   r   c                     U R                   " U0 UD6n [        R                  " UR                  5      $ ! [        R                   a    U R                  UR                  5        e f = fN)spawn_testprocpsutilProcesspidNoSuchProcessassertPidGone)selfargskwargssprocs       K/var/www/html/env/lib/python3.13/site-packages/psutil/tests/test_process.pyspawn_psprocTestProcess.spawn_psprocL   sY    ##T4V4	>>%)),,## 	uyy)	s	   4 1A%c                     [         R                  " 5       nUR                  [        R                  " 5       :X  d   e[
        R                  " [        5         SUl        S S S 5        g ! , (       d  f       g = f)N!   )r3   r4   r5   osgetpidr%   raisesAttributeErrorr8   ps     r<   test_pidTestProcess.test_pidV   sE    NNuu		###]]>*AE +**s   A&&
A4c                     U R                  5       nUR                  5         UR                  5       n[        (       a  U[        R
                  :X  d   eOU[        R                  * :X  d   eU R                  U5        g r1   )r=   killwaitr   signalSIGTERMSIGKILLassertProcessGoner8   rF   codes      r<   	test_killTestProcess.test_kill\   s]    	vvx76>>)))FNN?***q!    c                     U R                  5       nUR                  5         UR                  5       n[        (       a  U[        R
                  :X  d   eOU[        R
                  * :X  d   eU R                  U5        g r1   )r=   	terminaterK   r   rL   rM   rO   rP   s      r<   test_terminateTestProcess.test_terminatef   s]    	vvx76>>)))FNN?***q!rT   c                    [         (       a  [        R                  O[        R                  nU R	                  5       nUR                  U5        UR                  5       n[        (       a  X1:X  d   eOX1* :X  d   eU R                  U5        g r1   )	r   rL   rN   rM   r=   send_signalrK   r   rO   )r8   sigrF   rQ   s       r<   test_send_signalTestProcess.test_send_signalp   sc     %fnn6>>	cvvx7;;4<<q!rT   z	not POSIX)reasonc                 l   [         R                  nU R                  5       n[        R                  " S[
        S9   [        R                  " [        R                  5         UR                  U5        S S S 5        S S S 5        U R                  5       n[        R                  " S[        S9   [        R                  " [        R                  5         UR                  U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N9= f! , (       d  f       g = f)Nzpsutil.os.killside_effect)rL   rM   r=   r   patchProcessLookupErrorr%   rC   r3   r6   rZ   PermissionErrorAccessDenied)r8   r[   rF   s      r<   test_send_signal_mocked#TestProcess.test_send_signal_mocked{   s    nnZZ(6HIv334c" 5 J ZZ(oFv223c" 4 GF	 54 JI 43 GFsG   %DC21D*%D%D!D%2
D 	<D
D
D"	D%%
D3c                 6   [         SS/nU R                  U5      nUR                  5       nUS:X  d   eU R                  U5        [         SS/nU R                  U[        R
                  S9nUR                  5       nUS:X  d   eU R                  U5        [         SS/nU R                  U5      nUR                  5       nUS:X  d   eU R                  U5        [         SS	/nU R                  U5      nUR                  5       nUS:X  d   eU R                  U5        g )
N-cpassr   z1 / 0)stderr   zimport sys; sys.exit(5);   zimport os; os._exit(5);)r   r=   rK   rO   
subprocessPIPE)r8   cmdrF   rQ   s       r<   test_wait_exitedTestProcess.test_wait_exited   s    4(c"vvxqyyq!4)c*//:vvxqyyq!4!;<c"vvxqyyq!4!:;c"vvxqyyq!rT   zfails on NETBSDc                    U R                  5       n[        (       Ga   UR                  [        R                  5        [
        R                  " [        R                  5         UR                  SS9  S S S 5        UR                  [        R                  5        [
        R                  " [        R                  5         UR                  SS9  S S S 5        UR                  [        R                  5        UR                  5       [        R                  * :X  d   eUR                  5       [        R                  * :X  d   eg UR                  5         [
        R                  " [        R                  5         UR                  SS9  S S S 5        UR                  5         [
        R                  " [        R                  5         UR                  SS9  S S S 5        UR                  5         UR                  5       [        R                  :X  d   eUR                  5       [        R                  :X  d   eg ! , (       d  f       GN= f! , (       d  f       GN|= f! , (       d  f       N= f! , (       d  f       N= f)NMbP?)timeout)r=   r   rZ   rL   SIGSTOPr%   rC   r3   TimeoutExpiredrK   SIGCONTrM   suspendresumerV   rE   s     r<   test_wait_stoppedTestProcess.test_wait_stopped   s~   5 MM&..)v445u% 6MM&..)v445u% 6MM&..)668...668...IIKv445u% 6HHJv445u% 6KKM668v~~---668v~~---# 65 65 65 65s0    H.;I 1I=I#.
H= 
I
I #
I1c                    U R                  5       u  p[        R                  " [        R                  5         UR                  S5        S S S 5        [        R                  " [        R                  5         UR                  S5        S S S 5        UR                  5         UR                  5         UR                  5       nUR                  5       n[        (       a  U[        R                  * :X  d   eUb   eg U[        R                  :X  d   eU[        R                  :X  d   eg ! , (       d  f       N= f! , (       d  f       N= f)N{Gz?)
spawn_children_pairr%   rC   r3   rw   rK   rV   r   rL   rM   )r8   child
grandchild	child_retgrandchild_rets        r<   test_wait_non_children"TestProcess.test_wait_non_children   s     !446]]6001JJt 2]]6001OOD! 2 	JJL	#*5/// ")))......# 2111s   D$5D5$
D25
Ec                 
   U R                  5       nUR                  5         [        R                  " [        R
                  5         UR                  S5        S S S 5        [        R                  " [        R
                  5         UR                  S5        S S S 5        [        R                  " [        5         UR                  S5        S S S 5        g ! , (       d  f       N= f! , (       d  f       NT= f! , (       d  f       g = f)Nr~   r   )r=   namer%   rC   r3   rw   rK   
ValueErrorrE   s     r<   test_wait_timeoutTestProcess.test_wait_timeout   s    	]]6001FF4L 2]]6001FF1I 2]]:&FF2J '&	 2111&&s$   CC#7C4
C #
C14
Dc                    U R                  5       n[        R                  " [        R                  5         UR                  S5        S S S 5        UR                  5         [        R                  " 5       [        -   n[        R                  " 5       U:  a   UR                  S5      nOU R                  S5      e[        (       a  U[        R                  * :X  d   eOU[        R                  :X  d   eU R                  U5        g ! , (       d  f       N= f! [        R                   a     Of = f[        R                  " 5       U:  a  M  N)Nr   ru   )r=   r%   rC   r3   rw   rK   rJ   timer   failr   rL   rN   rM   rO   )r8   rF   stop_atrQ   s       r<   test_wait_timeout_nonblocking)TestProcess.test_wait_timeout_nonblocking   s    ]]6001FF1I 2	))+.iikG#vvay ))I&&5FNN?***6>>)))q!! 21 (( 	 iikG#s   DD 
DD+*D+c                 p   [         R                  " 5       nUR                  SS9  UR                  SS9  [        S5       H1  nUR                  S S9n[	        U[
        5      (       d   eUS:  a  M1   e   [        R                  " [        5         UR                  SS9  S S S 5        g ! , (       d  f       g = f)Nrt   )intervald           r   )	r3   r4   cpu_percentrange
isinstancefloatr%   rC   r   )r8   rF   _percents       r<   test_cpu_percentTestProcess.test_cpu_percent   s    NN	u%	u%sAmmTm2Ggu----c>!>  ]]:&MM2M& '&&s   B''
B5c                     [         R                  " SS S9 n[        R                  " 5       R	                  5         UR
                  (       d   e S S S 5        g ! , (       d  f       g = f)Nzpsutil.cpu_count)return_value)r   rb   r3   r4   r   called)r8   ms     r<   test_cpu_percent_numcpus_none)TestProcess.test_cpu_percent_numcpus_none   s=    ZZ*>!NN((*88O8 ?>>s   7A
A%c           
         [         R                  " 5       R                  5       nUR                  S:  d   U5       eUR                  S:  d   U5       eUR
                  S:  d   U5       eUR                  S:  d   U5       e[        (       a  UR                  S:  d   U5       eUR                   H7  n[        R                  " S[        R                  " [        X5      5      5        M9     g )Nr   z%H:%M:%S)r3   r4   	cpu_timesusersystemchildren_userchildren_systemr   iowait_fieldsr   strftime	localtimegetattr)r8   timesr   s      r<   test_cpu_timesTestProcess.test_cpu_times  s     **,zzS '%' ||s")E)"""c)050)$$+2U2+5<<3&--&MMDMM*dnnWU5I&JK "rT   c                    S nU" 5         [         R                  " 5       R                  5       n[        R                  " 5       nU R                  UR                  UR                  SS9  U R                  UR                  UR                  SS9  g )Nc                     [         R                  " 5       R                  S-   n [         R                  " 5       R                  U :  a=  [        S5       H  nUS-  nM
     [         R                  " 5       R                  U :  a  M<  g g )Ng?i    )rA   r   r   r   )r   xs     r<   	waste_cpu/TestProcess.test_cpu_times_2.<locals>.waste_cpu  sS    hhjoo+G((*//G+vA!GA ' ((*//G+rT   皙?)delta)r3   r4   r   rA   r   assertAlmostEqualr   r   )r8   r   abs       r<   test_cpu_times_2TestProcess.test_cpu_times_2  sh    	 	NN&&(HHJqvvqvvS9qxx=rT   znot supportedc                    [         R                  " 5       nUR                  5       nUS:  d   e[         R                  " 5       S:X  a  US:X  d   eUR                  5       [	        [         R                  " 5       5      ;   d   eg Nr   rl   )r3   r4   cpu_num	cpu_countr   )r8   rF   nums      r<   test_cpu_numTestProcess.test_cpu_num  sb    NNiikaxx"!8O8yy{eF$4$4$67777rT   c                 :   U R                  5       n[        R                  " 5       nUR                  5       n[        X2-
  5      nUS:  a  U R	                  SU SU SU 35      e[        R
                  " S[        R                  " UR                  5       5      5        g )Nr   z
expected: z	, found: z, difference: z%Y %m %d %H:%M:%S)r=   r   create_timeabsr   r   r   )r8   rF   nowr   
differences        r<   test_create_timeTestProcess.test_create_time%  s    iikmmo
 *+
>))SE;- 8<!  	)4>>!--/+JKrT   z
POSIX onlyc                     [         R                  " 5       R                  5       nUb1   [        R                  R                  [        S5      5      nX:X  d   eg g ! [         a    [        R                  " S5      ef = f)Nttyzcan't rely on `tty` CLI)
r3   r4   terminalrA   pathrealpathr)   RuntimeErrorr%   skip)r8   r   r   s      r<   test_terminalTestProcess.test_terminal7  sl    >>#,,.'gg&&r%y1
  &     =kk";<<=s   (A !A:)only_ifc                 H   [         R                  " 5       nUR                  5       n[        [        S5       nUR                  5         S S S 5        UR                  5       n[        (       d  [        (       d|  UR                  UR                  :  d   eUR                  UR                  :X  d   e[        (       a8  UR                  UR                  :  d   eUR                  UR                  :X  d   eO8UR                  UR                  :  d   eUR                  UR                  :  d   eUR                  5       n[        U R                  5       S5       nUR!                  [#        SS-  S5      5        S S S 5        UR                  5       nUR                  UR                  :  d   eUR                  UR                  :  d   eUR                  UR                  :  d   eUR                  UR                  :  d   e[        (       a8  UR                  UR                  :  d   eUR                  UR                  :  d   e[%        ['        U5      5       H*  n[        (       a  US:  a  M  XE   S:  d   eXE   S:  a  M*   e   g ! , (       d  f       GN@= f! , (       d  f       GN'= f)Nrbwbr   i@B asciir   r   )r3   r4   io_countersopenr   readr   r   
read_countwrite_countr   
read_charswrite_chars
read_byteswrite_bytes
get_testfnwritebytesr   len)r8   rF   io1fio2is         r<   test_io_countersTestProcess.test_io_countersC  s    NNmmo*d#qFFH $mmos33>>CNN222??coo555u~~666#//999>>S^^333??coo555 mmo$//#T*aGGE#-12 +mmo#//111#//111~~///~~///5??S__444>>S^^333 s3xAsqAv6Q;;6Q;; !7 $# +*s   J J 
J
J!z
linux onlyc                   ^ U4S jn[         R                  " 5       m[        (       d'  TR                  5       S   [         R                  :X  d   e[         R                  S:X  d   e[         R
                  S:X  d   e[         R                  S:X  d   e[         R                  S:X  d   eTR                  5       nU R                  X5        TR                  [         R                  5        [        TR                  5       5      [         R                  S4:X  d   e[        R                  " [        5         TR                  [         R                  SS9  S S S 5        TR                  [         R                  5        [        TR                  5       5      [         R                  S4:X  d   eTR                  [         R                  SS9  [        TR                  5       5      [         R                  S4:X  d   e[        R                  " [        5         TR                  [         R                  SS9  S S S 5         TR                  [         R
                  SS9  [        R                  " [        S	S
9   TR                  [         R                  S5        S S S 5        [        R                  " [        S	S
9   TR                  [         R                  S5        S S S 5        [        R                  " [        SS
9   TR                  SS9  S S S 5        g ! , (       d  f       GN= f! , (       d  f       N= f! [         R                   a     Nf = f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nc                 \   > U u  pU[         R                  :X  a  SnTR                  X5        g Nr   )r3   IOPRIO_CLASS_NONEionice)initioclassvaluerF   s      r<   cleanup.TestProcess.test_ionice_linux.<locals>.cleanupn  s)    !NG&222HHW$rT   r   rl   r         r      zioclass accepts no valuematchz$'ioclass' argument must be specified)r3   r4   r   r   r   IOPRIO_CLASS_RTIOPRIO_CLASS_BEIOPRIO_CLASS_IDLE
addCleanuptupler%   rC   r   re   )r8   r   r   rF   s      @r<   test_ionice_linuxTestProcess.test_ionice_linuxk  sz   	% NNz88:a=F$<$<<<<''1,,,%%***%%***''1,,,xxz& 	
))*QXXZ V%=%=q$AAAA]]:&HHV--QH7 ' 	
''(QXXZ V%;%;Q$????	''q1QXXZ V%;%;Q$????]]:&HHV++1H5 '	HHV++1H5 ]]:-GHHHV--q1 I]]:-GHHHV--q1 I]]D
 HH1H
 
% '& '& "" 		 IHHH
 
sN   0LL4L+ +!M-!M/M'
L
L(+MM
M
M$'
M5z!not supported on this win versionc                    [         R                  " 5       n[        (       d$  UR                  5       [         R                  :X  d   eUR                  5       nU R                  UR                  U5        UR                  [         R                  5        UR                  5       [         R                  :X  d   eUR                  [         R                  5        UR                  5       [         R                  :X  d   e UR                  [         R                  5        UR                  5       [         R                  :X  d   e [        R                  " [        SS9   UR                  [         R                  SS9  S S S 5        [        R                  " [        SS9   UR                  [         R                  S-   5        S S S 5        g ! [         R                   a     Nf = f! , (       d  f       Nm= f! , (       d  f       g = f)Nz&value argument not accepted on Windowsr   rl   r   zis not a valid priority)r3   r4   r   r   IOPRIO_NORMALr  IOPRIO_VERYLOW
IOPRIO_LOWIOPRIO_HIGHre   r%   rC   	TypeErrorr   )r8   rF   r   s      r<   test_ionice_winTestProcess.test_ionice_win  sh   
 NNz88:!5!5555xxz$' 	
&&'xxzV22222	""#xxzV.....	4HHV''( 88:!3!3333]]E
 HHV))H3
 ]]:-FGHHV''!+, HG "" 		

 
 HGs*   8G G#G,GG
G),
G:c                 L   SS K n[        R                  " [        R                  " 5       5      n[        [        5       Vs/ s H  o3R                  S5      (       d  M  UPM     nnU(       d   U5       eU H  n[        [        U5      nUS:  d   eU[        U5      ;   aF  U[        X5      :X  d   e[        (       a  MH  UR                  U5      UR                  U5      :X  d   eMp  UR                  U5      n[        U5      S:X  d   eUS   S:  d   eUS   S:  a  M   e   g s  snf )Nr   RLIMITr   r   rl   )resourcer3   r4   rA   rB   dir
startswithr   r   rlimit	getrlimitr   )r8   r  rF   r   namesr   r   rets           r<   test_rlimit_getTestProcess.test_rlimit_get  s    NN299;'KBKq<<+AKBeuDFD)EA::s8}$ 7777 4xx(*<*<U*CCCChhuo3x1}$}1v|#|1v|#|  Cs   D!D!c                 .   U R                  5       nUR                  [        R                  S5        UR                  [        R                  5      S:X  d   e[        (       aP  [
        R                  " [        SS9   [        R                  R                  S5      R                  S5        S S S 5        [
        R                  " [        5         UR                  [        R                  S5        S S S 5        g ! , (       d  f       NR= f! , (       d  f       g = f)N)rm   rm   zcan't use prlimitr   r   )rm   rm   rm   )
r=   r  r3   RLIMIT_NOFILEr   r%   rC   r   _psplatformr4   rE   s     r<   test_rlimit_setTestProcess.test_rlimit_set  s    	%%v.xx,,-777 5z1DE""**1-44Q7 F]]:&HHV))95 '& FE&&s   :/C5!D5
D
Dc                    [         R                  " 5       nU R                  5       nUR                  [         R                  5      u  p4 UR                  [         R                  SU45        [        US5       nUR                  S5        S S S 5        [        R                  " [        5       n[        US5       nUR                  S5        S S S 5        S S S 5        WR                  R                  [        R                  :X  d   e UR                  [         R                  X445        UR                  [         R                  5      X44:X  d   eg ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! UR                  [         R                  X445        UR                  [         R                  5      X44:X  d   ef = f)N   r   s   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXs  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)r3   r4   r   r  RLIMIT_FSIZEr   r   r%   rC   OSErrorr   errnoEFBIG)r8   rF   testfnsofthardr   excs          r<   test_rlimitTestProcess.test_rlimit  sA   NN"XXf112
	AHHV((4,7fd#q$ $ w'3&$'1GGK( ( ( 99??ekk111HHV((4,788F//0TL@@@ $#
 (' ('
 HHV((4,788F//0TL@@@sU   .E? 6E"E? *E.7E	E.2E? 
EE? 
E+	'E..
E<8E? ?A	Gc                    [         R                  " 5       nUR                  [         R                  5      u  p# UR                  [         R                  SU45        UR                  [         R                  [         R                  U45        [        U R                  5       S5       nUR                  S5        S S S 5        UR                  [         R                  X#45        UR                  [         R                  5      X#4:X  d   eg ! , (       d  f       NV= f! UR                  [         R                  X#45        UR                  [         R                  5      X#4:X  d   ef = f)Nr  r   s   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)r3   r4   r  r  RLIM_INFINITYr   r   r   )r8   rF   r$  r%  r   s        r<   test_rlimit_infinity TestProcess.test_rlimit_infinity  s     NNXXf112
	AHHV((4,7HHV((6+?+?*FGdoo'.!$ / HHV((4,788F//0TL@@@	 /. HHV((4,788F//0TL@@@s%   A,D $D6D 
DD A	E c                     [         R                  " 5       nUR                  [         R                  5      u  p#U[         R                  :X  d   eUR                  [         R                  X#45        g r1   )r3   r4   r  r  r*  )r8   rF   r$  r%  s       r<   test_rlimit_infinity_value&TestProcess.test_rlimit_infinity_value  sP     NNXXf112
v+++++	$$tl3rT   c                 b   [         R                  " 5       n[        (       a   UR                  5       nOUR                  5       n[        5          UR                  5       nX2S-   :X  d   e S S S 5        g ! [         R                   a    [
        R                  " S5      ef = f! , (       d  f       g = f)N$on OpenBSD this requires root accessrl   )r3   r4   r
   num_threadsre   r%   r   r   )r8   rF   step1step2s       r<   test_num_threadsTestProcess.test_num_threads	  s     NN7J MMOE\MMOEAI%%% \ && Jkk"HIIJ
 \s   A2 B 2+B 
B.zWINDOWS onlyc                 Z    [         R                  " 5       nUR                  5       S:  d   eg r   )r3   r4   num_handlesrE   s     r<   test_num_handlesTestProcess.test_num_handles  s$     NN}}"""rT   c                    [         R                  " 5       n[        (       a   UR                  5       nOUR                  5       n[        5          UR                  5       n[        U5      [        U5      S-   :X  d   eUS   nUR                  US   :X  d   eUR                  US   :X  d   eUR                  US   :X  d   e S S S 5        g ! [         R                   a    [
        R                  " S5      ef = f! , (       d  f       g = f)Nr1  rl   r   r   )r3   r4   r
   threadsre   r%   r   r   r   id	user_timesystem_time)r8   rF   r3  r4  athreads        r<   test_threadsTestProcess.test_threads   s    NN7J		 IIKE\IIKEu:Ua///AhG::+++$$
222&&'!*444 \ && Jkk"HIIJ
 \s   C	 A2C7	+C47
Dc                    U R                  5       n[        (       a   UR                  5         [        UR                  5       R                  [        S UR                  5        5       5      -
  5      S:  d   e[        UR                  5       R                  [        S UR                  5        5       5      -
  5      S:  d   eg ! [        R                   a    [
        R                  " S5      ef = f)Nr1  c              3   8   #    U  H  oR                   v   M     g 7fr1   )r>  .0r   s     r<   	<genexpr>-TestProcess.test_threads_2.<locals>.<genexpr>?  s     (Jkk   r   c              3   8   #    U  H  oR                   v   M     g 7fr1   )r?  rE  s     r<   rG  rH  C  s     *N+Q==+rI  )r=   r
   r<  r3   re   r%   r   r   r   r   sumr   rE   s     r<   test_threads_2TestProcess.test_threads_24  s     7J		 ""S(Jaiik(J%JJK	
 $$s*N!))+*N'NNO	
 && Jkk"HIIJs   C +C-c                 (   [         R                  " 5       nUR                  5       S S u  p#UR                  5       nUS:  d   eUS:  d   eS /S-  nUR                  5       S S u  pgUR                  5       nXb:  d   eXs:  d   eX:  d   eA[        (       aH  UR                  5       n	U	R
                  U	R                  :X  d   eU	R                  U	R                  :X  d   eUR                  5       n	U	R                   H  n
[        X5      S:  a  M   e   g )Nr   r   i` )r3   r4   memory_infomemory_percentr   rsswsetvmspagefiler   r   )r8   rF   rss1vms1percent1memarrrss2vms2percent2memr   s              r<   test_memory_infoTestProcess.test_memory_infoG  s   NN ]]_Ra(
##%axxaxx '!]]_Ra(
##% {{||"""7--/C77chh&&&77cll***mmoKKD3%***  rT   c                    [         R                  " 5       n[         R                  " 5       R                  nUR	                  5       nUR
                   H;  n[        X45      nUS:  d   eUS:X  a  [        (       d  [        (       a  M4  XR::  a  M;   e   [        (       d  [        (       d  [        (       a  UR                  S:  d   e[        (       a%  UR                  S:  d   eUR                  S:  d   eg g )Nr   rS  )r3   r4   virtual_memorytotalmemory_full_infor   r   r   r   r   r   usspssswap)r8   rF   ra  r\  r   r   s         r<   test_memory_full_info!TestProcess.test_memory_full_infof  s    NN%%'--  "KKDC&EA::##%%>!>   5GGuu77a<<577a<<88q= = rT   c                    [         R                  " 5       nUR                  5       n[        U5      [        [	        U5      5      :X  d   eUR                  SS9nU GH  nUR
                  R                  S5      (       a  M&  [        (       a  UR
                  S:X  a  MC  [        R
                  R                  UR
                  5      (       d   UR
                  5       e[        (       ar   [        R
                  R                  UR
                  5      (       dA  [        R
                  R                  UR
                  5      (       d   UR
                  5       eM  M  S[        R
                  R#                  UR
                  5      ;  d  GM/   [        R$                  " UR
                  5      n[$        R&                  " UR(                  5      (       d   UR
                  5       eGM     U Hc  nUR,                   HP  n[/        XH5      n	US:X  a  M  US	;   a  U	(       d   U	5       eM,  [1        U	[2        5      (       d   eU	S
:  a  MK   U	5       e   Me     g ! [         a[    [        (       d  e [        S5       nUR!                  5       nS S S 5        O! , (       d  f       O= fUR
                   S3W;  a  e  GMY  f = f! [*         a     GMk  f = f)NF)grouped[pvclockz/proc/self/smapsz
 (deleted)64r   >   addrpermsr   )r3   r4   memory_mapsr   setr   r  r   rA   isabsr   existsislinkAssertionErrorr   r   r   basenamestatS_ISREGst_modeFileNotFoundErrorr   r   r   int)
r8   rF   mapsext_mapsntr   datastfnamer   s
             r<   test_memory_mapsTestProcess.test_memory_mapsv  s!   NN}}4yCD	N***===/Bww!!#&&srww)+77==))22772)u77>>"''22bggnn7 7 ww  72 RWW--bgg66=)B  <<

33<RWW<3; > B*F?-- '%'5%eS1111 A:,u,: $ ' &  5"#56! vvx 766''*-T9 : ) s=   (A-I
 J7!J40J
	J4

JJ43J47
KKc                    [         R                  " 5       n[        5        nS nUR                  5        Vs/ s H  oC" UR                  5      PM     nnU" U5      U;   d   e S S S 5        g s  snf ! , (       d  f       g = f)Nc                 z    [         R                  R                  [         R                  R                  U 5      5      $ r1   )rA   r   r   normcaserF   s    r<   normpath8TestProcess.test_memory_maps_lists_lib.<locals>.normpath  s&    ww''(8(8(;<<rT   )r3   r4   r!   ro  r   )r8   rF   r   r  r   libpathss         r<   test_memory_maps_lists_lib&TestProcess.test_memory_maps_lists_lib  sk     NN "d= 34--/B/Q(/HBD>X--- #"
 C #"s   A0A+A0+A00
A>c                 6   [         R                  " 5       nUR                  5         [        R                  " [
        5         UR                  SS9  S S S 5        [        (       d  [        (       d  [        (       a  UR                  SS9  g g ! , (       d  f       N@= f)Nz?!?)memtyperc  )	r3   r4   rP  r%   rC   r   r   r   r   rE   s     r<   test_memory_percentTestProcess.test_memory_percent  sh    NN	]]:&U+ '5EEWWU+ % '&s    B


Bc                    U R                  5       nUR                  5       (       d   eUR                  5       (       d   eUR                  5         UR                  5         UR                  5       (       a   eUR                  5       (       a   eg r1   )r=   
is_runningrJ   rK   rE   s     r<   test_is_runningTestProcess.test_is_running  sf    ||~~~||~~~		<<>>!!<<>>!!>rT   c                 2   U R                  5       nUR                  5       n U[        :X  d   e [        USS/5      nUS:X  d   eg ! [         a    [        (       aP  [        U5      [        [        5      :X  a4  [        R                  R                  nU" U5      U" [        5      :X  d   e N|[        R                  S    S[        R                  S    3n UR                  US5      [        R                  " US5      :X  d   e N! [         a      Nf = ff = f)Nr   .rl    ri   zimport os; print('hey')hey)r=   exer   rt  r   r   rA   r   r  sysversion_inforeplacer)   )r8   rF   r  r  verouts         r<   test_exeTestProcess.test_exe  s    eeg	*$$$( #t678e||)  	w3s8s:677++}(<<<< ))!,-Qs/?/?/B.CD;;sB/:3E3Ec23NNNN% 	s0   A A#D+)D-D
DDDDc                 d   [         SS/nU R                  U5      n[        (       a*  UR                  5       / :X  a  [        R
                  " S5      e[        (       d  [        (       d  [        (       a  UR                  5       S   [         :X  d   eg [        (       ac  [        (       aX  UR                  5       S   nU[         :w  a;  SR                  UR                  5       SS  5      SR                  USS  5      :X  d   eg SR                  UR                  5       5      SR                  U5      :X  d   eg )Nri   2import time; [time.sleep(0.1) for x in range(100)]OPENBSD: returned EBUSYr    rl   )r   r=   r	   cmdliner%   r   r
   r   r   r   join)r8   r  rF   pyexes       r<   test_cmdlineTestProcess.test_cmdline  s    @

 g&6aiikR'++788 6WW99;q>Z///u		AJ&88AIIKO48MMMM88AIIK(CHHW,====rT   zbroken on PYPYc                    [         /nUR                  S/S-  5        UR                  SS/5        U R                  U5      n[        (       a   UR	                  5       U:X  d   eg UR	                  5       n[        (       a  U/ :X  a  [        R                  " S5      eX1:X  d   eg ! [
        R                   a    [        R                  " S5      ef = f)Nz-v2   ri   r  z#OPENBSD: process turned into zombier  )
r   extendr=   r
   r  r3   ZombieProcessr%   r   r	   )r8   r  rF   r  s       r<   test_long_cmdlineTestProcess.test_long_cmdline  s    ,v{#GH	
 g&7Iyy{g--- ))+Cv#)kk";<<>!> '' Ikk"GHHIs   B# #+Cc                 L   U R                  5       nUR                  5       R                  5       n[        R                  R                  [        R                  R                  [        R                  5      5      R                  5       nUR                  U5      (       d   X245       eg r1   )
r=   r   lowerrA   r   ru  r   r  
executabler  )r8   rF   r   r  s       r<   	test_nameTestProcess.test_name  sp    vvx~~  !1!1#..!ABHHJ%%4}4%rT   zunreliable on PYPYc                 T   [        U R                  [        R                  S-  S95      nUSS/nU R	                  U5      n[
        (       a5   UR                  5       [        R                  R                  U5      :X  d   eg UR                  5       [        R                  R                  U5      :X  d   eg ! [         ai    UR                  5       [        R                  :X  aE  [        R                  R                  U5      R                  UR                  5       5      (       d   e g e f = f)Nr   )suffixri   r  )r#   r   stringdigitsr=   r
   r   rA   r   ru  rt  statusr3   STATUS_ZOMBIEr  )r8   r  r  rF   s       r<   test_long_nameTestProcess.test_long_name  s    dooV]]Q5FoGH@

 g&7vvx277#3#3E#:::: 668rww//6666 " 88:!5!5577++E2==affhGGGG	s   3B4 4A/D'%D'c                 >   [         R                  " 5       nUR                  5       u  p#nU[        R                  " 5       :X  d   eU[        R
                  " 5       :X  d   e[        [        S5      (       a*  [        R                  " 5       UR                  5       :X  d   eg g N	getresuid)r3   r4   uidsrA   getuidgeteuidhasattrr  r8   rF   real	effective_saveds        r<   	test_uidsTestProcess.test_uidsD  t    NN"#&&(ryy{"""BJJL((( 2{##<<>QVVX--- $rT   c                 >   [         R                  " 5       nUR                  5       u  p#nU[        R                  " 5       :X  d   eU[        R
                  " 5       :X  d   e[        [        S5      (       a*  [        R                  " 5       UR                  5       :X  d   eg g r  )r3   r4   gidsrA   getgidgetegidr  	getresgidr  s        r<   	test_gidsTestProcess.test_gidsQ  r  rT   c                   ^ U4S jn[         R                  " 5       m[        R                  " [        5         TR                  S5        S S S 5        TR                  5       nU R                  X5        [        (       a  S n[         R                  [         R                  [         R                  [         R                  [         R                  [         R                  4 H  nU R                  US9    TR                  U5        TR                  5       nU[         R                  [         R                  [         R                  1;   a  XT:X  d  Uc	  UnXS:X  d   eOXT:X  d   e S S S 5        M     g  [!        ["        S5      (       aL  ["        R$                  " ["        R&                  ["        R(                  " 5       5      TR                  5       :X  d   eTR                  S5        TR                  5       S:X  d   e[!        ["        S5      (       aL  ["        R$                  " ["        R&                  ["        R(                  " 5       5      TR                  5       :X  d   e[*        (       d(  TR                  S5        TR                  5       S:X  d   eg g ! , (       d  f       GNF= f! [         R                   a     GNTf = f! , (       d  f       GM  = f! [         R                   a     g f = f)Nc                 ^   >  TR                  U 5        g ! [        R                   a     g f = fr1   )nicer3   re   )r   rF   s    r<   r   &TestProcess.test_nice.<locals>.cleanup_  s+    t&& s    ,,str)priogetpriorityrl   r   )r3   r4   r%   rC   r
  r  r  r   IDLE_PRIORITY_CLASSBELOW_NORMAL_PRIORITY_CLASSNORMAL_PRIORITY_CLASSABOVE_NORMAL_PRIORITY_CLASSHIGH_PRIORITY_CLASSREALTIME_PRIORITY_CLASSsubTestre   r  rA   r  PRIO_PROCESSrB   r   )r8   r   r   highest_prior  new_priorF   s         @r<   	test_niceTestProcess.test_nice^  s,   	 NN]]9%FF5M &vvx&7L**22,,22**.. \\t\,4t $%668
  ">>"66"::$ 
  (/<3G/3'/'? ?'?#+#33#3) -,<2}--r		D668$$ q	vvx1}$}2}--r		D668$$
 uFF1I668q=(= i &%$ "..  -,P && sO   J-J5/J AJ5+DK 
JJ2.J51J22J55
K	KKc                 v    [         R                  " 5       nUR                  5       [         R                  :X  d   eg r1   )r3   r4   r  STATUS_RUNNINGrE   s     r<   test_statusTestProcess.test_status  s(    NNxxzV22222rT   c                    U R                  5       nUR                  5       n[        (       a  UR                  S5      u  p2[        R
                  " 5       nUR                  S5      (       a  [        R                  " S5      eX$:X  d   eS[        R                  ;   a  U[        R                  S   :X  d   eg g U[        R
                  " 5       :X  d   eg )N\$zrunning as service account
USERDOMAIN)r=   usernamer   splitgetpassgetuserendswithr%   r   rA   environ)r8   rF   r  domaingetpass_users        r<   test_usernameTestProcess.test_username  s    ::<7'~~d3F"??,L$$S)) kk">??+++rzz)L!9999 * w0000rT   c                 v    U R                  5       nUR                  5       [        R                  " 5       :X  d   eg r1   )r=   cwdrA   getcwdrE   s     r<   test_cwdTestProcess.test_cwd  s*    uuw"))+%%%rT   c                 X   ^ [         SS/nU R                  U5      m[        U4S j5        g )Nri   zFimport os, time; os.chdir('..'); [time.sleep(0.1) for x in range(100)]c                     > T R                  5       [        R                  R                  [        R                  " 5       5      :H  $ r1   )r  rA   r   dirnamer  r  s   r<   <lambda>(TestProcess.test_cwd_2.<locals>.<lambda>  s#    1557bggoobiik&BBrT   )r   r=   r    )r8   rp   rF   s     @r<   
test_cwd_2TestProcess.test_cwd_2  s0    	
 c"BCrT   c           
         [         R                  " 5       nUR                  5       nU(       d   U5       eU R                  UR                  U5        [	        [
        S5      (       a/  U[        [
        R                  " UR                  5      5      :X  d   e[        U5      [        [        U5      5      :X  d   e[        [        [        [         R                  " SS95      5      5      nU H  nUR                  U/5        UR                  5       U/:X  d   e[	        [
        S5      (       a=  UR                  5       [        [
        R                  " UR                  5      5      :X  d   e[	        US5      (       d  M  UR                  5       S   UR                  5       :X  a  M   e   UR                  / 5        [        (       a/  UR                  5       UR                  R!                  5       :X  d   eOUR                  5       U:X  d   e[	        [
        S5      (       a=  UR                  5       [        [
        R                  " UR                  5      5      :X  d   e["        R$                  " [&        5         UR                  S5        S S S 5        UR                  U5        UR                  [        U5      5        UR                  [)        U5      5        g ! , (       d  f       NT= f)Nsched_getaffinityTpercpunum_cpur   rl   )r3   r4   cpu_affinityr  r  rA   listr  r5   r   rp  r   r   r  r   _proc_get_eligible_cpusr%   rC   r
  r  )r8   rF   initialall_cpusns        r<   test_cpu_affinity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5>>#qww'A'A'CCCC>>#x///2*++>>#tB,@,@,G'HHHH]]9%NN1 &	w	s8}%	uX' &%s   1K
Kc                    U R                  5       n[        [        R                  " SS95      S-   /n[        R
                  " [        5         UR                  U5        S S S 5        [        R
                  " [        5         UR                  [        SS5      5        S S S 5        [        R
                  " [        [        45         UR                  SS/5        S S S 5        [        R
                  " [        5         UR                  SS/5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Ng= f! , (       d  f       g = f)	NTr  
   i'  i*  r   1r   )
r=   r   r3   r   r%   rC   r   r  r   r
  )r8   rF   invalid_cpus      r<   test_cpu_affinity_errs"TestProcess.test_cpu_affinity_errs  s    6++489B>?]]:&NN;' ']]:&NN5./ ']]Iz23NNAs8$ 4]]:&NNAr7# '& '&&&33&&s0   D D(D9:E

D%(
D69
E

Ec                    [         R                  " 5       nUR                  5       nU(       d   U5       eU R                  UR                  U5        [	        U5      S:  a  US S n/ n[        [	        U5      S-   5       H/  nUR                  S [        R                  " X$5       5       5        M1     U H<  nUR                  U5        [        UR                  5       5      [        U5      :X  a  M<   e   g )N   rl   c              3   J   #    U  H  nU(       d  M  [        U5      v   M     g 7fr1   )r  )rF  subsets     r<   rG  ATestProcess.test_cpu_affinity_all_combinations.<locals>.<genexpr>  s"      @F V@s   ##)
r3   r4   r  r  r   r   r  	itertoolscombinationssorted)r8   rF   r  combosr   combos         r<   "test_cpu_affinity_all_combinations.TestProcess.test_cpu_affinity_all_combinations  s    NN.."w0 w<"crlGs7|a'(AMM '44W@  ) ENN5!!..*+ve}<<< rT   zbroken on BSDc                   ^^ [         R                  " 5       mU R                  5       nTR                  5       mUT;  d   e[	        US5       nUR                  S5        UR                  5         [        UU4S j5        TR                  5       mT Vs/ s H,  n[        R                  R                  UR                  5      PM.     nn[        R                  R                  U5      U;   d   e[        (       a-  T H'  nUR                  U:X  d  M  UR                  S:X  a  M'   e   S S S 5        T H8  n[        R                  R                  UR                  5      (       a  M3   U5       e   SU S3nU R                  [        SU/5      m[!        S5       Hg  nTR                  5        Vs/ s H,  n[        R                  R                  UR                  5      PM.     nnX;   a    O?["        R$                  " S	5        Mi     [        R                  R                  U5      W;   d   eU H.  n[        R                  R                  U5      (       a  M)   U5       e   g s  snf ! , (       d  f       GN@= fs  snf )
Nr   s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc                  N   > [        TR                  5       5      [        T 5      :g  $ r1   )r   
open_files)filesrF   s   r<   r  -TestProcess.test_open_files.<locals>.<lambda>  s    s1<<>2c%j@rT   r  zimport time; f = open(r'z/', 'r'); [time.sleep(0.1) for x in range(100)];ri   r   r~   )r3   r4   r   r$  r   r   flushr    rA   r   r  r   positionisfiler=   r   r   r   sleep)	r8   r#  r   r   	filenamesfiler  r%  rF   s	          @@r<   test_open_filesTestProcess.test_open_files  s   NN"U"""&$1GGK GGI@ALLNE;@A5a))!&&15IA77##F+y888u!DyyF*#}}444 "   D77>>$)),,2d2, 
 'vh /  	 z49:sA;<<<>J>a))!&&1>IJ"JJt	  77##F+y888D77>>$''--' / B  . Ks2   AI3IAII I(3I/I
I,c                 V   [         R                  " 5       n[        R                  R                  nU R                  5       n[        US5       nUR                  5        HI  nU" UR                  5      U" UR                  5      :X  d   UR                  UR                  5       :X  d  MI    O%   U R                  SUR                  5       < 35      eU" UR                  5      U" UR                  5      :X  d   e[        (       a  UR                  S:X  d   eO UR                  UR                  5       :X  d   eUR                  5       S   nUS   UR                  :X  d   eUS   UR                  :X  d   eUR                  UR                  5       ;  d   e S S S 5        g ! , (       d  f       g = f)Nwzno file found; files=r   r   rl   )r3   r4   rA   r   r  r   r   r$  r   fdfilenor   r   )r8   rF   r  r#  fileobjr,  ntuples          r<   test_open_files_2TestProcess.test_open_files_27  sE    NN77##"&#'TYY'8GLL+AAww'.."22 ' ii"77I JKKDII&(7<<*@@@@www"}$}ww'.."2222\\^A&F!9+++!9		)))<<q||~555' s   AF&C*F
F(c                    [         R                  " 5       nU R                  5       nUR                  5       n[	        US5      nU R                  UR                  5        UR                  5       US-   :X  d   e[        R                  " 5       nU R                  UR                  5        UR                  5       US-   :X  d   eUR                  5         UR                  5         UR                  5       U:X  d   eg )Nr0  rl   r   )r3   r4   r   num_fdsr   r  closesocket)r8   rF   r#  startr,  socks         r<   test_num_fdsTestProcess.test_num_fdsR  s    NN"		FC 

#yy{eai'''}}

#yy{eai'''



yy{e###rT   z not reliable on OPENBSD & NETBSDc                    [         R                  " 5       n[        UR                  5       5      n[	        S5       H9  n[
        R                  " S5        [        UR                  5       5      nXB:  d  M9    g    U R                  S5      e)Nr   g?z2num ctx switches still the same after 2 iterations)r3   r4   rK  num_ctx_switchesr   r   r*  r   )r8   rF   beforer   afters        r<   test_num_ctx_switches!TestProcess.test_num_ctx_switchesa  sj    
 NNQ'')*qAJJt**,-E~	 
 iiLMMrT   c                    [         R                  " 5       n[        [        S5      (       a)  UR	                  5       [        R
                  " 5       :X  d   eU R                  5       nUR	                  5       [        R                  " 5       :X  d   eg )Ngetppid)r3   r4   r  rA   ppidrF  r=   rB   rE   s     r<   	test_ppidTestProcess.test_ppido  s]    NN2y!!668rzz|+++vvx299;&&&rT   c                    U R                  5       nUR                  5       R                  [        R                  " 5       :X  d   e[
        R                  " 5       S   n[
        R                  " U5      R                  5       b   eg r   )r=   parentr5   rA   rB   r3   pidsr4   )r8   rF   
lowest_pids      r<   test_parentTestProcess.test_parentv  s\    xxz~~,,,[[]1%
~~j)002:::rT   c                     [         R                  " 5       nU R                  5       u  p#UR                  5       U:X  d   eUR                  5       U:X  d   eg r1   )r3   r4   r   rK  r8   rK  r   r   s       r<   test_parent_multiTestProcess.test_parent_multi}  sJ    ! 446  "e+++||~'''rT   c                    [         R                  " 5       nUR                  5       (       d   eU R                  5       u  p#UR                  5       S   U:X  d   eUR                  5       S   U:X  d   eUR                  5       S   U:X  d   eg r   )r3   r4   parentsr   rQ  s       r<   test_parentsTestProcess.test_parents  s    !~~ 446}}q!V+++!!#A&%///!!#A&&000rT   c                    [         R                  " 5       nUR                  5       (       a   eUR                  SS9(       a   eU R                  SS9nUR                  5       nUR                  SS9nX44 HV  n[	        U5      S:X  d   eUS   R
                  UR
                  :X  d   eUS   R                  5       UR
                  :X  a  MV   e   g )NT	recursiver   )creationflagsrl   )r3   r4   childrenr=   r   r5   rG  )r8   rK  r   	children1	children2r\  s         r<   test_childrenTestProcess.test_children  s    !??$$$$??T?222 !!!2OO%	OOdO3	".Hx=A%%%A;??eii///A;##%333 /rT   c                    [         R                  " 5       nU R                  5       u  p#UR                  5       U/:X  d   eUR                  SS9X#/:X  d   eUR	                  5         UR                  5         UR                  SS9(       a   eg )NTrY  )r3   r4   r   r\  rV   rK   rQ  s       r<   test_children_recursive#TestProcess.test_children_recursive  s     ! 446 UG+++.52EEEE 	

??T?2222rT   c                 (   [         R                  " [        5      n[        R                  " 5        H  n XR                  5       ==   S-  ss'   M      [        UR                  5       S S9S   n[        (       a  US:X  a  [        R                  " S5      e[        R                  " U5      n UR                  SS9n[        U5      [        [        U5      5      :X  d   eg ! [        R                   a     M  f = f! [        R                    a     g f = f)Nrl   c                     U S   $ )Nrl    )r   s    r<   r  6TestProcess.test_children_duplicates.<locals>.<lambda>  s    qtrT   )keyr   zPID 0TrY  )collectionsdefaultdictrz  r3   process_iterrG  Errormaxitemsr   r%   r   r4   r\  r   rp  re   )r8   tablerF   r5   cs        r<   test_children_duplicates$TestProcess.test_children_duplicates  s    '',$$&Affh1$ ' %++-^4Q75SAX++g&&NN3	)

T
*A q6SQ[((( <<  "" 		s#   C,C: C76C7:DDc                 
   [         R                  " 5       nU R                  5       u  p#UR                  SS9n[	        U5      S:X  d   eUS   U:X  d   eUS   U:X  d   eUR                  5       nUS   U:X  d   eUS   U:X  d   eg )NTrY  r   r   rl   )r3   r4   r   r\  r   rU  )r8   rK  r   r   r\  rU  s         r<   test_parents_and_children%TestProcess.test_parents_and_children  s    ! 446??T?28}!!!{e###{j((($$&qzU"""qzV###rT   c                 D   U R                  5       nUR                  5         [        S5       H=  nUR                  5       [        R
                  :X  a    O[        R                  " S5        M?     UR                  5         UR                  5       [        R
                  :w  d   eg )Nr   r~   )	r=   ry   r   r  r3   STATUS_STOPPEDr   r*  rz   )r8   rF   r   s      r<   test_suspend_resumeTestProcess.test_suspend_resume  so    			sAxxzV222JJt  	

xxzV22222rT   c                 ,   [         R                  " [        5         [        R                  " S5        S S S 5        [         R                  " [
        5         [        R                  " S5        S S S 5        g ! , (       d  f       NH= f! , (       d  f       g = f)Nr  r   )r%   rC   r
  r3   r4   r   )r8   s    r<   test_invalid_pidTestProcess.test_invalid_pid  sO    ]]9%NN3 &]]:&NN2 '& &%&&s   A4B4
B
Bc                    [         R                  " 5       nUR                  SS/S9n[        UR	                  5       5      SS/:X  d   e[         R                  " [        [         R                  " 5       5      5      nUR                  S/SS9n[        US   [        5      (       d  US   S:X  d   e[        R                  " SS[         R                  S	9   UR                  S
/SS9S
S0:X  d   e S S S 5        [        R                  " SS[         R                  " UR                  S5      S	9   [        R                  " [         R                  5         UR                  S
/S9  S S S 5        S S S 5        [        R                  " SS[         R                   " UR                  S5      S	9   UR                  S
/SS9S
S0:X  d   e S S S 5        [        R                  " SS["        S	9   UR                  5       nS
[        UR	                  5       5      ;  d   e[        R                  " ["        5         UR                  S
/S9  S S S 5        S S S 5        [        R                  " [$        5         UR                  S5        S S S 5        [        R                  " [&        5         UR                  S/5        S S S 5        [        R                  " [&        5         UR                  SS/5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNj= f! , (       d  f       N= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr  r   )attrsnet_connectionsfoo)r~  ad_valuezpsutil.Process.niceT)createra   r  rl   bar)r3   r4   as_dictr  keysminrL  r   r  r   rb   re   r6   r5   r%   rC   r  NotImplementedErrorr
  r   )r8   rF   ds      r<   test_as_dictTestProcess.test_as_dict  s   NNIIUFOI,affhE6?222NN3v{{}-.II./%I@!-.55&'5000 ZZ!$F<O<O
 99F8a98VQKGGG
 ZZ!,,QUUF;

 v334			) 5
 ZZ!,,QUUF;

 99F8e9<OOO
 ZZ!$<O
 		Aaffh///23			) 4
 ]]9%IIf &]]:&IIug ']]:&IIuen% '&M
 
 54
 

 
 43
 
 &%&&&&s   K-*%LK? L%L#"A
M,L5=M'MM)M:-
K<?
L		L
L #
L25
M	?M
M
M&)
M7:
Nc                    [         R                  " 5       n[        R                  " S5       nUR	                  5          UR                  5         UR                  5         S S S 5        UR                  S:X  d   e S S S 5        [        R                  " S5       nUR                  5         UR                  5         S S S 5        WR                  S:X  d   eg ! , (       d  f       N{= f! , (       d  f       Nq= f! , (       d  f       NC= f)N$psutil._psplatform.Process.cpu_timesrl   r   r3   r4   r   rb   oneshotr   
call_countr8   rF   r   s      r<   test_oneshotTestProcess.test_oneshot  s    NNZZ>?1  <<1$$$	 @ ZZ>?1KKMKKM @ ||q     @? @?s.   C$!CC$!C5
C!	C$$
C25
Dc           	      $   [         R                  " 5       n[        R                  " S5       n[        R                  " S5       nUR	                  5          UR                  5         UR                  5         UR	                  5          UR                  5         UR                  5         S S S 5        S S S 5        UR                  S:X  d   eUR                  S:X  d   e S S S 5        S S S 5        [        R                  " S5       nUR                  5         UR                  5         S S S 5        WR                  S:X  d   eg ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Ne= f)Nr  z(psutil._psplatform.Process.oneshot_enterrl   r   r  )r8   rF   m1m2r   s        r<   test_oneshot_twiceTestProcess.test_oneshot_twice  s    NNZZ>?2FG2YY[KKMKKM % ! }})))}}))) H @ ZZ>?1KKMKKM @ ||q    % ![ HG @? @?s_   E0E1E!D=	&E.,EE0!F=
EE
EE
E-	)E00
E>
Fc                    U R                  5       u  pUR                  5       nUR                  5       nX4:w  d   eUR                  5          UR                  5       U:X  d   eUR                  5       U:X  d   e S S S 5        UR                  5          UR                  5       U:X  d   eUR                  5       U:X  d   e S S S 5        g ! , (       d  f       NU= f! , (       d  f       g = fr1   )r   rG  r  )r8   p1p2p1_ppidp2_ppids        r<   test_oneshot_cacheTestProcess.test_oneshot_cache.  s     ))+'')'')!!!ZZ\779'''779'''  ZZ\779'''779''' \ \ \s   
-C-C
C
C&c                 8  ^ ^ U 4S jnT R                  5       mTR                  5         TR                  5         [        (       a  [	        U4S j5        T R                  T5        [        T5      nUR                  UR                  5       H  u  p4U" X45        M     g )Nc                   >  U " 5       n[         (       a  US;   a  g TR                  U < SU< S35      e! [        R                   a    e [        R                   a     g [        R
                   a    [        (       a  US;   a   g e f = f)N>   r  r   z didn't raise NSP and returned z instead>   r<  r2  )r   r   r3   r  r6   re   r
   )funfun_namer  r8   s      r<   assert_raises_nspFTestProcess.test_halfway_terminated_process.<locals>.assert_raises_nspE  s    e 7x?:iig<SG8L  '' '' && 7x+EEs   5 (B$BBc                  H   > T R                   [        R                  " 5       ;  $ r1   )r5   r3   rL  r  s   r<   r  =TestProcess.test_halfway_terminated_process.<locals>.<lambda>\  s    quuFKKM9rT   )	r=   rV   rK   r   r    rO   r$   iterall)r8   r  nsr  r   rF   s   `    @r<   test_halfway_terminated_process+TestProcess.test_halfway_terminated_process=  sp    	& 		79:q!q!ICc( )rT   c                 J    U R                  5       u  pU R                  U5        g r1   )spawn_zombieassertProcessZombie)r8   _parentzombies      r<   test_zombie_processTestProcess.test_zombie_processc  s     ++-  (rT   c                 
   [         R                  " 5       n[        R                  " S[         R                  " S5      S9 nUR                  5       (       d   eUR                  (       d   e S S S 5        g ! , (       d  f       g = f)Nzpsutil.Processr   r`   )r3   r4   r   rb   r  r  r   r  s      r<   $test_zombie_process_is_running_w_exc0TestProcess.test_zombie_process_is_running_w_exch  sZ     NNZZ&*>*>q*A
<<>>!>88O8	
 
 
s   +A44
Bc                 $   [         R                  " 5       n[        R                  " S[         R                  " S5      S9 nUR                  5       [         R                  :X  d   eUR                  (       d   e S S S 5        g ! , (       d  f       g = f)Nz!psutil._psplatform.Process.statusr   r`   )r3   r4   r   rb   r  r  r  r   r  s      r<    test_zombie_process_status_w_exc,TestProcess.test_zombie_process_status_w_excs  sg     NNZZ/,,Q/
 88:!5!555588O8
 
 
s   8B
Bc                    U R                  5       n[        R                  " UR                  5      nUR                  UR	                  5       S-   4Ul        [        [        R                  " 5       5        UR                  [        R                  ;   d   eUR                  5       (       a   e[        R                  R                  [        R                  SS5         [        R                  " [         R"                  " 5       5       n[        [        R                  " 5       5        S S S 5        S S S 5        SUR                   3WR%                  5       ;   d   eUR                  [        R                  ;  d   eU[        R                  " UR                  5      :w  d   eSn['        U5      nUR)                  UR*                  UR,                  -   SS9 HP  u  pgU R/                  US9   [0        R2                  " [        R4                  US	9   U" 5         S S S 5        S S S 5        MR     S
[7        U5      ;   d   eS
[9        U5      ;   d   e[0        R2                  " [        R4                  US	9   UR;                  5         S S S 5        [0        R2                  " [        R4                  US	9   UR=                  5         S S S 5        [0        R2                  " [        R4                  US	9   UR?                  5         S S S 5        [0        R2                  " [        R4                  US	9   URA                  5         S S S 5        g ! , (       d  f       GN= f! , (       d  f       GN%= f! , (       d  f       GNR= f! , (       d  f       GM  = f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr   PSUTIL_DEBUGTz+refreshing Process instance for reused PID z4process no longer exists and its PID has been reusedF)clear_cache)r   r   zterminated + PID reused)!r2   r3   r4   r5   r   _identr  rk  _pmapr  r   rb   object_common
contextlibredirect_stderrioStringIOgetvaluer$   r  setterskillersr  r%   rC   r6   r  reprrG  rK  rU  r\  )r8   subprF   r   msgr  r  r   s           r<   test_reused_pidTestProcess.test_reused_pid  s~   ""$NN488$EE1==?S01V  "#uu$$$<<>>!! ZZv~~~tD++BKKM:aV((*+ ; E :!%%Azz|	
 uuFLL(((FNN488,,,,Dq!bjj!8eLIC4(]]6#7#7sCE D )( M
 )CF222(DG333]]6//s;FFH <]]6//s;HHJ <]]6//s;IIK <]]6//s;JJL <;3 ;: ED DC )( <;;;;;;;sx   *ML6"M#$M,MM,(M?$N N"N36
M	 M
M
M)$M,,
M<	?
N
N"
N03
Oc                 
   S[         R                  " 5       ;  a  [        R                  " [         R                  5         [         R
                  " S5        S S S 5        [         R                  " S5      (       a   e[         R
                  " S5      R                  5       S:X  d   eg [         R
                  " S5      n[        (       a  [         R                  O[        n[        R                  " U5         UR                  5         S S S 5        [        R                  " U5         UR                  5         S S S 5        [        R                  " U5         UR                  5         S S S 5        [        R                  " U5         UR                  5         S S S 5        [        R                  " U5         UR                  5         S S S 5        [        R                  " U5         UR!                  ["        R$                  5        S S S 5        ['        U5      nUR)                  UR*                  UR,                  -   5       Hj  u  pE U" 5       nUS;   a  UR.                  S:X  d   eM'  US:X  a'  [        (       a  SOSnUR1                  5       U:X  d   eMT  US:X  a  U(       d   U5       eMj  Ml     [2        (       d9  S[         R                  " 5       ;   d   e[         R                  " S5      (       d   eg g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNa= f! [         R                   a     GMI  f = f)Nr   rl   >   r  r  r  zNT AUTHORITY\SYSTEMrootr   )r3   rL  r%   rC   r6   r4   
pid_existsrG  r   re   r   rK   rV   ry   rz   rJ   rZ   rL   rM   r$   r  gettersr  r  r  r
   )r8   rF   r&  r  r  r   r  r   s           r<   
test_pid_0TestProcess.test_pid_0  sM   FKKM!v334q! 5 ((++++>>!$))+q000NN1%,Wf!!*]]3FFH  ]]3KKM  ]]3IIK  ]]3HHJ  ]]3FFH  ]]3MM&..)   q!bjj!89IC&e ++88q=(=Z'5<W1&D::<4///V^%%4 $ : w%%%$$Q'''' O 54   && se   K+2K=!LL!?L3.M M>M)+
K:=
L
L!
L03
M
M
M&)NNc                     S nS U l         [        R                  " 5       nU" UR                  5       5      nU" [        R                  R                  5       5      n[        (       d  [        (       a  X4:X  d   eg g g )Nc           	      T   / SQn[         (       a  UR                  / SQ5        U H  nU R                  US 5        M     U R                  5        VVs0 s HH  u  p4UR	                  SS5      R	                  SS5      UR	                  SS5      R	                  SS5      _MJ     snn$ s  snnf )N)PLATHOMEPYTEST_CURRENT_TESTPYTEST_VERSION)__CF_USER_TEXT_ENCODINGVERSIONER_PYTHON_PREFER_32_BITVERSIONER_PYTHON_VERSIONr  r  
)r   r  poprn  r  )r  excluder   kvs        r<   
clean_dict,TestProcess.test_environ.<locals>.clean_dict  s    OGu     dD!   GGI	 &DA 		$#++D"5qyy"8'$#$ &	  s   AB$)maxDiffr3   r4   r  rA   copyr   r   )r8   r  rF   d1d2s        r<   test_environTestProcess.test_environ  sZ    	$ NN		$

)*s~~8O8 &srT   z<macOS 11+ can't get another process environment, issue #2084z(sometimes fails on `assert is_running()`c                    [         R                  " S5      n[        U R                  5       US9nU R	                  U/[
        R                  [
        R                  S9n[        R                  " UR                  5      n[        UR                  5        UR                  5       (       d   eUR                  R                  5       S:X  d   e[        (       a  [        (       a   UR!                  5       nOUR!                  5       nUSSS.:X  d   eUR%                  5         UR&                  S:X  d   eg ! [        R"                   a     g f = f)	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)stdinrk   rT   r  3)ACr   )textwrapdedentr"   r   r2   rn   ro   r3   r4   r5   r,   r  rk   r   r   r   r  re   communicate
returncode)r8   rQ   cexer;   rF   envs         r<   test_weird_environTestProcess.test_weird_environ  s        DOO-d;##F*//*// $ 
 NN599%QUU||~~~||  "c)))5ZZiik ))+CCc****1$$$ &&  s    D/ /EE)r  N)j__name__
__module____qualname____firstlineno____doc__r=   rG   rR   rW   r\   r%   markskipifr   rf   rq   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.  r5  r9  r   rA  r(   r*   r   rL  r]  rf  r   r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r   r   r  r  r   r   r-  r5  r=  r
   rC  rH  rN  rR  rV  r_  rb  rq  rt  rx  r{  r  r  r  r  r  r  r  r  r  r  r   r  r   r  __static_attributes__rf  rT   r<   r.   r.   I   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 [[%56" 7"*5 [[%9:7 ;7Z [[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  N ,N';( 1 14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%%rT   r.   c                   @    \ rS rSrSr\S 5       rS rS rS r	S r
Srg	)
	TestPopeni'  zTests for psutil.Popen class.c                     [        5         g r1   r&   )clss    r<   tearDownClassTestPopen.tearDownClass*  s    rT   c                    [         SS/n[        R                  " U[        R                  [        R                  [
        S9 nUR                  5         UR                  5         UR                    [        U5      (       d   e[        R                  " [        5         UR                    S S S 5        UR                  5         S S S 5        [        (       a'  WR!                  S5      ["        R$                  * :X  d   eg WR!                  S5      ["        R$                  :X  d   eg ! , (       d  f       N~= f! , (       d  f       Nw= f)Nri   3import time; [time.sleep(0.1) for x in range(100)];stdoutrk   r  rm   )r   r3   Popenrn   ro   r   r   r   r  r  r%   rC   rD   r  rV   r   rK   rL   rM   r8   rp   procs      r<   	test_miscTestPopen.test_misc.  s    
 A

 \\????	

 IIKNNJJt999~. /NN
 599Q<FNN?22299Q<6>>111 /.
 
s%   AD0D'D0
D-	)D00
D>c                    [         R                  " [        S/[        R                  [        R                  [        R                  [
        S9 nUR                  5         S S S 5        WR                  R                  (       d   eUR                  R                  (       d   eUR                  R                  (       d   eUR                  S:X  d   eg ! , (       d  f       Nx= f)Nz-V)r  rk   r  r  r   )r3   r	  r   rn   ro   r   r  r  closedrk   r  r  )r8   r  s     r<   test_ctx_managerTestPopen.test_ctx_managerI  s    \\????//
 
 {{!!!!{{!!!!zz    !###
 
s   C
Cc                 x   [         SS/n[        R                  " U[        R                  [        R                  [
        S9 nUR                  5         UR                  5         [        R                  " [        R                  5         UR                  5         S S S 5        [        R                  " [        R                  5         UR                  5         S S S 5        [        R                  " [        R                  5         UR                  [        R                  5        S S S 5        [        (       a  [        R                  " [        R                  5         UR                  [        R                   5        S S S 5        [        R                  " [        R                  5         UR                  [        R"                  5        S S S 5        S S S 5        g ! , (       d  f       GND= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N]= f! , (       d  f       g = fNri   r  r  )r   r3   r	  rn   ro   r   rV   rK   r%   rC   r6   rJ   rZ   rL   rM   r   CTRL_C_EVENTCTRL_BREAK_EVENTr
  s      r<   test_kill_terminateTestPopen.test_kill_terminateW  sO   
 A

 \\????	

 NNIIKv334  5v334		 5v334  0 5w]]6#7#78$$V%8%89 9]]6#7#78$$V%<%<= 9#
 
 544444 9888#
 
s   AH+G,H+G&,H+  G8 7H+ H	7,H+# HH+
G#	H+&
G5	0H+8
H	H+	
H	H+
H(	$H++
H9c                 x   [         SS/n[        R                  " U[        R                  [        R                  [
        S9 nUR                  5         UR                  5         [        R                  " [        5         UR                    S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = fr  )r   r3   r	  rn   ro   r   rV   rK   r%   rC   rD   r  r
  s      r<   test__getattribute__TestPopen.test__getattribute__t  s    A

 \\????	

 NNIIK~. /
 
 /.
 
s$   ;B+<B	B+
B(	$B++
B9rf  N)r  r  r  r  r  classmethodr  r  r  r  r  r  rf  rT   r<   r   r   '  s+    ' 26$>:rT   r   )>r  ri  r  r!  r  r  r  rA   rL   r:  rv  r  rn   r  r  r   unittestr   r3   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   rf  rT   r<   <module>r     s    &     	  	      
              $ # ' ' ) $ # ( ) - # $ %  # ' ' # # , % & *  & )  . 0 %V%. V%|.\ \rT   