
    9i                        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                   B   \ 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\	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(\	R                  RS                  S#S$9S% 5       r*\	R                  R                  \!(       + S&S9S' 5       r+\	R                  R                  \,(       + SS9S( 5       r-\." 5       \/" \0S9\	R                  R                  \,(       + SS9S) 5       5       5       r1\." 5       S* 5       r2S+ r3\	R                  R                  \4(       + SS9S, 5       r5\	R                  R                  \4(       + SS9S- 5       r6S. r7S/ r8S0 r9S1 r:S2 r;S3 r<\." 5       S4 5       r=\	R                  R                  \(       + SS9S5 5       r>\	R                  R                  \(       + SS9S6 5       r?S7 r@S8 rAS9 rBS: rCS; rD\	R                  R                  \E(       + SS9S< 5       rF\	R                  R                  \E(       + SS9S= 5       rG\	R                  R                  \E(       + SS9S> 5       rH\	R                  R                  \IS?S9S@ 5       rJ\	R                  R                  \IS?S9SA 5       rK\	R                  R                  \(       + SS9\	R                  RS                  S#S$9SB 5       5       rL\" \S9\	R                  R                  \M=(       d    \SCS9SD 5       5       rNSE rOSF rPSG rQSH rR\." 5       SI 5       rSSJ 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TestProcessH   r   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!   )psutilProcesspidosgetpidr%   raisesAttributeErrorselfps     Y/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/psutil/tests/test_process.pytest_pidTestProcess.test_pidK   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 N)spawn_psprockillwaitr   signalSIGTERMSIGKILLassert_proc_goner:   r;   codes      r<   	test_killTestProcess.test_killQ   s]    	vvx76>>)))FNN?***a     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 r@   )rA   	terminaterC   r   rD   rE   rG   rH   s      r<   test_terminateTestProcess.test_terminate[   s]    	vvx76>>)))FNN?***a rL   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 r@   )	r   rD   rF   rE   rA   send_signalrC   r   rG   )r:   sigr;   rI   s       r<   test_send_signalTestProcess.test_send_signale   sc     %fnn6>>	cvvx7;;4<<a rL   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)rD   rE   rA   r   patchProcessLookupErrorr%   r7   r2   NoSuchProcessrR   PermissionErrorAccessDenied)r:   rS   r;   s      r<   test_send_signal_mocked#TestProcess.test_send_signal_mockedp   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   rA   rC   rG   
subprocessPIPE)r:   cmdr;   rI   s       r<   test_wait_exitedTestProcess.test_wait_exited}   s    4(c"vvxqyya 4)c*//:vvxqyya 4!;<c"vvxqyya 4!:;c"vvxqyya rL   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)rA   r   rR   rD   SIGSTOPr%   r7   r2   TimeoutExpiredrC   SIGCONTrE   suspendresumerN   r9   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%   r7   r2   rq   rC   rN   r   rD   rE   )r:   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)Nrx   r   )rA   namer%   r7   r2   rq   rC   
ValueErrorr9   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[        R                  " S5      $ [        (       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   ro   )rA   r%   r7   r2   rq   rC   rB   timer   failr   rD   rF   rE   rG   )r:   r;   stop_atrI   s       r<   test_wait_timeout_nonblocking)TestProcess.test_wait_timeout_nonblocking   s    ]]6001FF1I 2	))+.iikG#vvay ;;y))5FNN?***6>>)))a ! 21 (( 	 iikG#s   DD 
DD0/D0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)Nrn   )intervald           r   )	r2   r3   cpu_percentrange
isinstancefloatr%   r7   r   )r:   r;   _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   r[   r2   r3   r   called)r:   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)r2   r3   	cpu_timesusersystemchildren_userchildren_systemr   iowait_fieldsr   strftime	localtimegetattr)r:   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 "rL   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   rf   )r2   r3   cpu_num	cpu_countr   )r:   r;   nums      r<   test_cpu_numTestProcess.test_cpu_num  sb    NNiikaxx"!8O8yy{eF$4$4$67777rL   c                    U R                  5       n[        R                  " 5       n[        UR                  5       U-
  5      S:  d   e[        R                  " S[        R
                  " UR                  5       5      5        g )N   z%Y %m %d %H:%M:%S)rA   r   abscreate_timer   r   )r:   r;   nows      r<   test_create_timeTestProcess.test_create_time  sW    iik1==?S()A---)4>>!--/+JKrL   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      s $ f = f)Nttyzcan't rely on `tty` CLI)
r2   r3   terminalr5   pathrealpathr)   RuntimeErrorr%   skip)r:   r   r   s      r<   test_terminalTestProcess.test_terminal  sl    >>#,,.'gg&&r%y1
  &     >{{#<==>s   (A  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wbxi@B asciir   r   )r2   r3   io_countersopenr   readr   r   
read_countwrite_countr   
read_charswrite_chars
read_byteswrite_bytes
get_testfnwritebytesr   len)r:   r;   io1fio2is         r<   test_io_countersTestProcess.test_io_counters!  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   )r2   IOPRIO_CLASS_NONEionice)initioclassvaluer;   s      r<   cleanup.TestProcess.test_ionice_linux.<locals>.cleanupL  s)    !NG&222HHW$rL   r   rf   r         r      zioclass accepts no valuematchz$'ioclass' argument must be specified)r2   r3   r   r   r   IOPRIO_CLASS_RTIOPRIO_CLASS_BEIOPRIO_CLASS_IDLE
addCleanuptupler%   r7   r   r_   )r:   r   r   r;   s      @r<   test_ionice_linuxTestProcess.test_ionice_linuxI  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   rf   r   zis not a valid priority)r2   r3   r   r   IOPRIO_NORMALr   IOPRIO_VERYLOW
IOPRIO_LOWIOPRIO_HIGHr_   r%   r7   	TypeErrorr   )r:   r;   r   s      r<   test_ionice_winTestProcess.test_ionice_winv  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   rf   )resourcer2   r3   r5   r6   dir
startswithr   r   rlimit	getrlimitr   )r:   r   r;   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)rg   rg   zcan't use prlimitr   r   )rg   rg   rg   )
rA   r   r2   RLIMIT_NOFILEr   r%   r7   r   _psplatformr3   r9   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)r2   r3   r   r   RLIMIT_FSIZEr   r   r%   r7   OSErrorr   errnoEFBIG)r:   r;   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)r2   r3   r   r  RLIM_INFINITYr   r   r   )r:   r;   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 r@   )r2   r3   r   r  r  )r:   r;   r  r  s       r<   test_rlimit_infinity_value&TestProcess.test_rlimit_infinity_value  sP     NNXXf112
v+++++	$$tl3rL   serialr   c                 f   [         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      s $ f = f! , (       d  f       g = f)N$on OpenBSD this requires root accessrf   )r2   r3   r
   num_threadsr_   r%   r   r   )r:   r;   step1step2s       r<   test_num_threadsTestProcess.test_num_threads  s    
 NN7K MMOE\MMOEAI%%% \ && K{{#IJJK
 \s   A2 B"2*BB"
B0zWINDOWS onlyc                 Z    [         R                  " 5       nUR                  5       S:  d   eg r   )r2   r3   num_handlesr9   s     r<   test_num_handlesTestProcess.test_num_handles  s$     NN}}"""rL   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      s $ f = f! , (       d  f       g = f)Nr!  rf   r   r   )r2   r3   r
   threadsr_   r%   r   r   r   id	user_timesystem_time)r:   r;   r#  r$  athreads        r<   test_threadsTestProcess.test_threads  s    NN7K		 IIKE\IIKEu:Ua///AhG::+++$$
222&&'!*444 \ && K{{#IJJK
 \s   C	 A2C9	*C65C69
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      s $ f = f)Nr!  c              3   8   #    U  H  oR                   v   M     g 7fr@   )r.  .0r   s     r<   	<genexpr>-TestProcess.test_threads_2.<locals>.<genexpr>  s     (Jkk   g?c              3   8   #    U  H  oR                   v   M     g 7fr@   )r/  r5  s     r<   r7  r8  "  s     *N+Q==+r9  )rA   r
   r,  r2   r_   r%   r   r   r   r   sumr   r9   s     r<   test_threads_2TestProcess.test_threads_2  s     7K		 ""S(Jaiik(J%JJK	
 $$s*N!))+*N'NNO	
 && K{{#IJJKs   C *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` )r2   r3   memory_infomemory_percentr   rsswsetvmspagefiler   r   )r:   r;   rss1vms1percent1memarrrss2vms2percent2memr   s              r<   test_memory_infoTestProcess.test_memory_info&  s   NN ]]_Ra(
##%axxaxx '!]]_Ra(
##% {{||"""7--/C77chh&&&77cll***mmoKKD3%***  rL   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   rC  )r2   r3   virtual_memorytotalmemory_full_infor   r   r   r   r   r   usspssswap)r:   r;   rQ  rL  r   r   s         r<   test_memory_full_info!TestProcess.test_memory_full_infoE  s    NN%%'--  "KKDC&EA::##%%>!>   5GGuu77a<<577a<<88q= = rL   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   )r2   r3   memory_mapsr   setr   r   r   r5   isabsr   existsislinkAssertionErrorr   r   r   basenamestatS_ISREGst_modeFileNotFoundErrorr   r   r   int)
r:   r;   mapsext_mapsntr   datastfnamer   s
             r<   test_memory_mapsTestProcess.test_memory_mapsU  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      $ r@   )r5   r   r   normcaser;   s    r<   normpath8TestProcess.test_memory_maps_lists_lib.<locals>.normpath  s&    ww''(8(8(;<<rL   )r2   r3   r!   r_  r   )r:   r;   r   rw  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?!?)memtyperS  )	r2   r3   r@  r%   r7   r   r   r   r   r9   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 r@   )rA   
is_runningrB   rC   r9   s     r<   test_is_runningTestProcess.test_is_running  sf    ||~~~||~~~		<<>>!!<<>>!!>rL   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   .rf    rc   zimport os; print('hey')hey)rA   exer   rd  r   r   r5   r   ru  sysversion_inforeplacer)   )r:   r;   r  ru  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      $ [        (       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 )Nrc   2import time; [time.sleep(0.1) for x in range(100)]OPENBSD: returned EBUSYr    rf   )r   rA   r	   cmdliner%   r   r
   r   r   r   join)r:   r  r;   pyexes       r<   test_cmdlineTestProcess.test_cmdline  s    @

 g&6aiikR';;899 6WW99;q>Z///u		AJ&88AIIKO48MMMM88AIIK(CHHW,====rL   c                    [         /nUR                  S/S-  5        UR                  SS/5        U R                  U5      nUSS  n[        (       a   UR	                  5       SS  U:X  d   eg UR	                  5       SS  n[        (       a  U/ :X  a  [        R                  " S5      $ X1:X  d   eg ! [
        R                   a    [        R                  " S5      s $ f = f)Nz-v2   rc   r  rf   z#OPENBSD: process turned into zombier  )
r   extendrA   r
   r  r2   ZombieProcessr%   r   r	   )r:   r  r;   r  s       r<   test_long_cmdlineTestProcess.test_long_cmdline  s    ,v{#GH	
 g& !"+7Jyy{12'111 ))+ab/Cv#){{#<==>!> '' J{{#HIIJs   B. .*CCc                    U R                  5       nUR                  5       R                  5       nUR                  S5      (       a  US S n[        R
                  R                  [        R
                  R                  [        R                  5      5      R                  5       nUR                  U5      (       d   X245       eg )Ntr   )rA   r   lowerendswithr5   r   re  r   r  
executabler   )r:   r;   r   r  s       r<   	test_nameTestProcess.test_name  s    vvx~~==9D  !1!1#..!ABHHJ%%4}4%rL   c                 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   )suffixrc   r  )r#   r   stringdigitsrA   r
   r   r5   r   re  rd  statusr2   STATUS_ZOMBIEr   )r:   r  r  r;   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)r2   r3   uidsr5   getuidgeteuidhasattrr  r:   r;   real	effective_saveds        r<   	test_uidsTestProcess.test_uids  t    NN"#&&(ryy{"""BJJL((( 2{##<<>QVVX--- $rL   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  )r2   r3   gidsr5   getgidgetegidr  	getresgidr  s        r<   	test_gidsTestProcess.test_gids#  r  rL   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r@   )nicer2   r_   )r   r;   s    r<   r   &TestProcess.test_nice.<locals>.cleanup1  s+    t&& s    ,,str)priogetpriorityrf   r   )r2   r3   r%   r7   r   r  r   r   IDLE_PRIORITY_CLASSBELOW_NORMAL_PRIORITY_CLASSNORMAL_PRIORITY_CLASSABOVE_NORMAL_PRIORITY_CLASSHIGH_PRIORITY_CLASSREALTIME_PRIORITY_CLASSsubTestr_   r  r5   r  PRIO_PROCESSr6   r   )r:   r   r   highest_prior  new_prior;   s         @r<   	test_niceTestProcess.test_nice0  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 r@   )r2   r3   r  STATUS_RUNNINGr9   s     r<   test_statusTestProcess.test_statusr  s(    NNxxzV22222rL   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      $ 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)rA   usernamer   splitgetpassgetuserr  r%   r   r5   environ)r:   r;   r  domaingetpass_users        r<   test_usernameTestProcess.test_usernamev  s    ::<7'~~d3F"??,L$$S)) {{#?@@+++rzz)L!9999 * w0000rL   c                 v    U R                  5       nUR                  5       [        R                  " 5       :X  d   eg r@   )rA   cwdr5   getcwdr9   s     r<   test_cwdTestProcess.test_cwd  s*    uuw"))+%%%rL   c                 X   ^ [         SS/nU R                  U5      m[        U4S j5        g )Nrc   zFimport os, time; os.chdir('..'); [time.sleep(0.1) for x in range(100)]c                     > T R                  5       [        R                  R                  [        R                  " 5       5      :H  $ r@   )r  r5   r   dirnamer  rv  s   r<   <lambda>(TestProcess.test_cwd_2.<locals>.<lambda>  s#    1557bggoobiik&BBrL   )r   rA   r    )r:   rj   r;   s     @r<   
test_cwd_2TestProcess.test_cwd_2  s0    	
 c"BCrL   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   rf   )r2   r3   cpu_affinityr   r  r5   listr  r4   r   r`  r   r   r  r   _proc_get_eligible_cpusr%   r7   r   r   )r:   r;   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   )
rA   r   r2   r   r%   r7   r   r  r   r   )r:   r;   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   rf   c              3   J   #    U  H  nU(       d  M  [        U5      v   M     g 7fr@   )r  )r6  subsets     r<   r7  ATestProcess.test_cpu_affinity_all_combinations.<locals>.<genexpr>  s"      @F V@s   ##)
r2   r3   r  r   r   r   r  	itertoolscombinationssorted)r:   r;   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}<<< rL   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  $ r@   )r   
open_files)filesr;   s   r<   r  -TestProcess.test_open_files.<locals>.<lambda>  s    s1<<>2c%j@rL   r  zimport time; f = open(r'z/', 'r'); [time.sleep(0.1) for x in range(100)];rc   r   rx   )r2   r3   r   r  r   r   flushr    r5   r   ru  r   positionisfilerA   r   r   r   sleep)	r:   r  r   r   	filenamesfiler  r  r;   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                 r   [         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    O3   [        R                  " SUR                  5       < 35      sS S S 5        $ 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   rf   )r2   r3   r5   r   ru  r   r   r  r   fdfilenor%   r   r   )r:   r;   ru  r  fileobjr  ntuples          r<   test_open_files_2TestProcess.test_open_files_2	  sL    NN77##"&#'TYY'8GLL+AAww'.."22 ' {{%:1<<>:L#MN  DII&(7<<*@@@@www"}$}ww'.."2222\\^A&F!9+++!9		)))<<q||~555' s   AF(&+F(CF((
F6c                    [         R                  " 5       nU R                  5       nUR                  5       n[	        US5         UR                  5       US-   :X  d   e[
        R
                  " 5          UR                  5       US-   :X  d   e S S S 5        S S S 5        UR                  5       U:X  d   eg ! , (       d  f       N-= f! , (       d  f       N6= f)Nr!  rf   r   )r2   r3   r   num_fdsr   socket)r:   r;   r  starts       r<   test_num_fdsTestProcess.test_num_fds$  s     NN"		&#99;%!)+++yy{eai/// !  yy{e### ! s$   /C1B3C3
C	=C
C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    [        R                  " S5      $ )Nr   g?z2num ctx switches still the same after 2 iterations)	r2   r3   r;  num_ctx_switchesr   r   r  r%   r   )r:   r;   beforer   afters        r<   test_num_ctx_switches!TestProcess.test_num_ctx_switches0  sn    
 NNQ'')*qAJJt**,-E~	 
 {{@
 	
rL   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)r2   r3   r  r5   ppidr5  rA   r6   r9   s     r<   	test_ppidTestProcess.test_ppid@  s]    NN2y!!668rzz|+++vvx299;&&&rL   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   )rA   parentr4   r5   r6   r2   pidsr3   )r:   r;   
lowest_pids      r<   test_parentTestProcess.test_parentG  s\    xxz~~,,,[[]1%
~~j)002:::rL   c                     U R                  5       nUR                  5         UR                  (       d   eSUl        UR                  5       R                  [
        R                  " 5       :X  d   eg Nrf   )rA   r   _create_timer:  r4   r5   r6   r9   s     r<   test_parent_mocked_ctime$TestProcess.test_parent_mocked_ctimeN  sL     	~~~xxz~~,,,rL   c                     [         R                  " 5       nU R                  5       u  p#UR                  5       U:X  d   eUR                  5       U:X  d   eg r@   )r2   r3   ry   r:  r:   r:  rz   r{   s       r<   test_parent_multiTestProcess.test_parent_multiZ  sJ    ! 446  "e+++||~'''rL   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   )r2   r3   parentsry   rE  s       r<   test_parentsTestProcess.test_parents`  s    !~~ 446}}q!V+++!!#A&%///!!#A&&000rL   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   creationflagsrf   )r2   r3   childrenrA   r   r4   r6  r:   r:  rz   	children1	children2rQ  s         r<   test_childrenTestProcess.test_childreni  s    !??$$$$??T?222 !!!2OO%	OOdO3	".Hx=A%%%A;??eii///A;##%333 /rL   c                    [         R                  " 5       nUR                  5         UR                  (       d   eU=R                  S-  sl        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 )Ni TrM  r   rO  rf   )	r2   r3   r   rA  rQ  rA   r   r4   r6  rR  s         r<   test_children_mocked_ctime&TestProcess.test_children_mocked_ctimex  s     !""""v%??$$$$??T?222 !!!2OO%	OOdO3	".Hx=A%%%A;??eii///A;##%333 /rL   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 )NTrM  )r2   r3   ry   rQ  rN   rC   rE  s       r<   test_children_recursive#TestProcess.test_children_recursive  s     ! 446 UG+++.52EEEE 	

??T?2222rL   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      $ [        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)Nrf   c                     U S   $ r@   )r   s    r<   r  6TestProcess.test_children_duplicates.<locals>.<lambda>  s    qtrL   )keyr   zPID 0TrM  )collectionsdefaultdictrj  r2   process_iterr6  Errormaxitemsr   r%   r   r3   rQ  r   r`  r_   )r:   tabler;   r4   cs        r<   test_children_duplicates$TestProcess.test_children_duplicates  s    '',$$&Affh1$ ' %++-^4Q75SAX;;w''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 )NTrM  r   r   rf   )r2   r3   ry   rQ  r   rI  )r:   r:  rz   r{   rQ  rI  s         r<   test_parents_and_children%TestProcess.test_parents_and_children  s    ! 446??T?28}!!!{e###{j((($$&qzU"""qzV###rL   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   rx   )	rA   rs   r   r  r2   STATUS_STOPPEDr   r  rt   )r:   r;   r   s      r<   test_suspend_resumeTestProcess.test_suspend_resume  so    			sAxxzV222JJt  	

xxzV22222rL   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%   r7   r   r2   r3   r   )r:   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)rw  ad_valuezpsutil.Process.niceT)createrZ   r  rf   bar)r2   r3   as_dictr  keysminr;  r   r  r   r[   r_   r]   r4   r%   r7   r  NotImplementedErrorr   r   )r:   r;   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_timesrf   r   r2   r3   r   r[   oneshotr   
call_countr:   r;   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_enterrf   r   r  )r:   r;   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r@   )ry   r6  r  )r:   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                 0  ^ S nU R                  5       mTR                  5         TR                  5         [        (       a  [	        U4S j5        U 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 [        R                  " U < SU< S35      $ ! [        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,  r"  )r   r%   r   r2   r  r]   r_   r
   )funfun_namer  s      r<   assert_raises_nspFTestProcess.test_halfway_terminated_process.<locals>.assert_raises_nsp:  s    e 7x?:{{g<SG8L  '' '' && 7x+EEs   9 (B#$B	Bc                  H   > T R                   [        R                  " 5       ;  $ r@   )r4   r2   r;  rv  s   r<   r  =TestProcess.test_halfway_terminated_process.<locals>.<lambda>Q  s    quuFKKM9rL   )	rA   rN   rC   r   r    rG   r$   iterall)r:   r  nsr  r   r;   s        @r<   test_halfway_terminated_process+TestProcess.test_halfway_terminated_process2  sp    	& 		79:a q!ICc( )rL   c                    U R                  5       u  pU R                  U5        [        [        R                  R
                  S5      (       a~  [        R                  R
                  R                  [        R                  " 5       5      (       a   e[        R                  R
                  R                  UR                  5      (       d   eg g )Nproc_is_zombie)
spawn_zombieassert_proc_zombier  r2   r  cextr  r5   r6   r4   )r:   _parentzombies      r<   test_zombie_processTestProcess.test_zombie_processX  s    ++-'6%%**,<==))..==biikJJJJ%%**99&**EEEE >rL   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   rY   )r2   r3   r   r[   r  r  r   r  s      r<   $test_zombie_process_is_running_w_exc0TestProcess.test_zombie_process_is_running_w_exc`  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   rY   )r2   r3   r   r[   r  r  r  r   r  s      r<    test_zombie_process_status_w_exc,TestProcess.test_zombie_process_status_w_exck  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_cacher  r   zterminated + PID reused)!spawn_subprocr2   r3   r4   r   _identr  rd  _pmapr  r   r[   object_common
contextlibredirect_stderrioStringIOgetvaluer$   r  setterskillersr  r%   r7   r]   r  reprr6  r:  rI  rQ  )r:   subpr;   r   msgr  r  r   s           r<   test_reused_pidTestProcess.test_reused_pidw  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   rf   >   r  r  r  zNT AUTHORITY\SYSTEMrootr   )r2   r;  r%   r7   r]   r3   
pid_existsr6  r   r_   r   rC   rN   rs   rt   rB   rR   rD   rE   r$   r  gettersr  r  r  r
   )r:   r;   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           	         SS1n[         (       a  UR                  / SQ5        [        U R                  5       5       H1  nX!;   d  UR	                  S5      (       d  M   U R                  U5        M3     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)__CF_USER_TEXT_ENCODINGVERSIONER_PYTHON_PREFER_32_BITVERSIONER_PYTHON_VERSIONPYTEST_r  
)r   updater  r~  r   poprg  r  )r  excluder   kvs        r<   
clean_dict,TestProcess.test_environ.<locals>.clean_dict  s    v&Gu   
 QVVX?dooi&@&@EE$K ' GGI	 &DA 		$#++D"5IIdB'//b9: &	  s   AC)maxDiffr2   r3   r  r5   copyr   r   )r:   r  r;   d1d2s        r<   test_environTestProcess.test_environ  sZ    	$ NN		$

)*s~~8O8 &srL   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)stdinre   rL   r  3)ACr   )textwrapdedentr"   r   r  rh   ri   r2   r3   r4   r,   r  re   r   r   r   r  r_   communicate
returncode)r:   rI   cexesprocr;   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=   rJ   rO   rT   r%   markskipifr   r`   rk   r	   ru   r~   r   r   r   r   r   r   r   r   r   r   r+   r   r   r   r   r   r   r   r  r	  r  r  r  xdist_groupr%  r)  r   r1  r(   r*   r   r<  rM  rV  r   rq  rz  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r   r  r&  r,  r
   r2  r7  r=  rB  rF  rJ  rU  rX  r[  rj  rm  rq  rt  r  r  r  r  r  r  r  r  r  r  r   r  r   r  __static_attributes__r_  rL   r<   r.   r.   H   s   )!!	! [[E	+6
# 7
#!6 [['89. :.2/.!(	'
L [[,,_E8 F8L [[E	,7	' 8	' [[00IU+$ , J$L [[J?[[E	,7) 8 @)V [[J?[[?  - @-4 [[J?$ @$. [[J?
6 @
6 [[J?A @A$ [[J?A @A [[J?	4 @	4 [[(+& ,&" [[GN;# <#
 [[K@5 A5& 5)[[K@
 A * 
  + +<!  [[O+OD.- E.-` [[O+OD	. E	.,"6>6"45 7 74 [[E	,7
. 8
. [[E	,7
. 8
.@D31"&
D [[,,_E$( F$(L [[,,_E
$ F
$ [[,,_E= F=, [[O4#. 5#.L [[O46 564 [[E	,7[[(+$ , 8$ U+[[6"D  

 ,

';
-( 1 14403)($32&h!!(($)L [[E	,7F 8F [[E	,7 8 [[E	,7	 8	'R,(\ [[K@ A4 [[K@[[E	,7[[M   [[A  %%	 8 A%%rL   r.   c                       \ rS rSrSr\S 5       r\R                  R                  \
=(       a    \SS9S 5       rS rS rS	 rS
rg)	TestPopeni  zTests for psutil.Popen class.c                     [        5         g r@   r&   )clss    r<   tearDownClassTestPopen.tearDownClass"  s    rL   zhangs on OSX + CIrV   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)Nrc   3import time; [time.sleep(0.1) for x in range(100)];stdoutre   r  rg   )r   r2   Popenrh   ri   r   r   r   r  r   r%   r7   r8   ry  rN   r   rC   rD   rE   r:   rj   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  re   r  r  r   )r2   r  r   rh   ri   r   r  r  closedre   r  r  )r:   r	  s     r<   test_ctx_managerTestPopen.test_ctx_managerB  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Nrc   r  r  )r   r2   r  rh   ri   r   rN   rC   r%   r7   r]   rB   rR   rD   rE   r   CTRL_C_EVENTCTRL_BREAK_EVENTr  s      r<   test_kill_terminateTestPopen.test_kill_terminateP  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   r2   r  rh   ri   r   rN   rC   r%   r7   r8   ry  r  s      r<   test__getattribute__TestPopen.test__getattribute__m  s    A

 \\????	

 NNIIK~. /
 
 /.
 
s$   ;B+<B	B+
B(	$B++
B9r_  N)r  r  r  r  r  classmethodr  r%   r  r  r   r   r
  r  r  r  r  r_  rL   r<   r  r    sU    '  [[0.9LM2 N26$>:rL   r  )>r  rb  r  r  r  r  r  r5   rD   r*  rf  r  rh   r  r  r   unittestr   r2   r   r   r   r   r	   r
   r   r   r   psutil._commonr   psutil.testsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r'   r(   r)   r*   r+   r,   r.   r  r_  rL   r<   <module>r     s    &     	  	      
              $ # ' ' ) $ # ( ) - # $ %  # ' ' # # , % & *  & )  . 0 %O%. O%n.] ]rL   