
    g                     "   d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddl!m"Z" ddl!m#Z# ddl!m$Z$ ddl!m%Z% ddl!m&Z& ddl!m'Z' ddl!m(Z( ddl!m)Z) ddl!m*Z* ddl!m+Z+ ddl!m,Z, ddl!m-Z- ddl!m.Z. ddl!m/Z/ dd l!m0Z0 dd!l!m1Z1 dd"l!m2Z2 dd#l!m3Z3 dd$l!m4Z4 dd%l!m5Z5 dd&l!m6Z6 dd'l!m7Z7 dd(l!m8Z8 dd)l!m9Z9 dd*l!m:Z: dd+l!m;Z; dd,l!m<Z< dd-l!m=Z= dd.l!m>Z> dd/l!m?Z? dd0l!m@Z@ dd1l!mAZA  G d2 d3e3      ZBer ej                         dk(  r G d4 d5eB      ZD G d6 d7e3      ZEy)8Tests for psutil.Process class.    N)AIX)BSD)LINUX)MACOS)NETBSD)OPENBSD)OSX)POSIX)WINDOWS)	open_text)PY3)FileNotFoundError)long)redirect_stderr)super)APPVEYOR)
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)	QEMU_USER)PsutilTestCase)
ThreadTask)
call_until)copyload_shared_lib)create_c_exe)create_py_exe)mock)process_namespace)pytestreap_children)retry_on_failure)sh)skip_on_access_denied)skip_on_not_implemented)wait_for_pidc                   x   e Zd ZdZd Zd Zd Zd Zd Ze	j                  j                  e d      d	        Zd
 Ze	j                  j                  ed      d        Zd Zd Zd Zd Zd Ze	j                  j                  ed      d        Ze	j                  j                  ed      d        Ze	j                  j                  e d      d        Zd Ze	j                  j                  e d      d        Ze	j                  j                  e d       ee      d               Z e	j                  j                  e! d      e	j                  j                  e d      d               Z"e	j                  j                  e! d      e	j                  j                  e# d      d               Z$e	j                  j                  e% d      d         Z&e	j                  j                  e% d      d!        Z'e	j                  j                  e% d      d"        Z(e	j                  j                  e% d      d#        Z)e	j                  j                  e% d      d$        Z*d% Z+e	j                  j                  e# d&      d'        Z,e	j                  j                  e- d      d(        Z. e/        e0e1      e	j                  j                  e- d      d)                      Z2 e/       d*        Z3d+ Z4e	j                  j                  e5 d      d,        Z6e	j                  j                  e5 d      d-        Z7d. Z8d/ Z9e	j                  j                  ed      d0        Z:d1 Z;e	j                  j                  e<d2      d3        Z=d4 Z>e	j                  j                  e<xs ed5      e	j                  j                  ed6      e	j                  j                  e1xr e? d7      d8                      Z@e	j                  j                  e d      d9        ZAe	j                  j                  e d      d:        ZBd; ZCe	j                  j                  ed      d<        ZDd= ZEd> ZFd? ZGe	j                  j                  eH d      d@        ZIe	j                  j                  eH d      dA        ZJe	j                  j                  eH d      dB        ZKe	j                  j                  eLdC      e	j                  j                  eMdD      dE               ZNe	j                  j                  eLdC      e	j                  j                  eMdD      dF               ZOe	j                  j                  e d      dG        ZP ee      e	j                  j                  eQxs edH      dI               ZRdJ ZSdK ZTdL ZUe	j                  j                  ed       e/       dM               ZVdN ZWdO ZXdP ZYdQ ZZdR Z[dS Z\dT Z]dU Z^dV Z_dW Z`dX Zae	j                  j                  e d      dY        Zbe	j                  j                  e d      dZ        Zce	j                  j                  e d      d[        Zdd\ Zed] Zfe	j                  j                  eg d      d^        Zhe	j                  j                  eg d      e	j                  j                  e d      e	j                  j                  eid_      e	j                  j                  ed`      da                             Zjyb)cTestProcessr   c                      | j                   |i |}	 t        j                  |j                        S # t        j                  $ r | j                  |j                          w xY wN)spawn_testprocpsutilProcesspidNoSuchProcessassertPidGone)selfargskwargssprocs       N/var/www/openai/venv/lib/python3.12/site-packages/psutil/tests/test_process.pyspawn_psproczTestProcess.spawn_psprocR   s[    ###T4V4	>>%)),,## 	uyy)	s	   3 0A#c                     t        j                         }|j                  t        j                         k(  sJ t        j                  t              5  d|_        d d d        y # 1 sw Y   y xY w)N!   )r9   r:   r;   osgetpidr,   raisesAttributeErrorr>   ps     rB   test_pidzTestProcess.test_pid\   sE    NNuu		###]]>*AE +**s   A""A+c                     | j                         }|j                          |j                         }t        r|t        j
                  k(  sJ |t        j                   k(  sJ | j                  |       y r7   )rC   killwaitr   signalSIGTERMSIGKILLassertProcessGoner>   rK   codes      rB   	test_killzTestProcess.test_killb   s[    	vvx6>>)))FNN?***q!    c                     | j                         }|j                          |j                         }t        r|t        j
                  k(  sJ |t        j
                   k(  sJ | j                  |       y r7   )rC   	terminaterO   r   rP   rQ   rS   rT   s      rB   test_terminatezTestProcess.test_terminatel   s[    	vvx6>>)))FNN?***q!rW   c                     t         rt        j                  nt        j                  }| j	                         }|j                  |       |j                         }t        r||k(  s
J || k(  sJ | j                  |       y r7   )	r   rP   rR   rQ   rC   send_signalrO   r   rS   )r>   sigrK   rU   s       rB   test_send_signalzTestProcess.test_send_signalv   sc     %fnn6>>	cvvx3;;C4<<q!rW   z	not POSIXreasonc                    t         j                  }| j                         }t        j                  dt        t        j                  d            5  t        j                  t        j                        5  |j                  |       d d d        d d d        | j                         }t        j                  dt        t        j                  d            5  t        j                  t        j                        5  |j                  |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   *xY w# 1 sw Y   y xY w)Nzpsutil.os.kill side_effect)rP   rQ   rC   r*   patchOSErrorerrnoESRCHr,   rH   r9   r<   r\   EPERMAccessDenied)r>   r]   rK   s      rB   test_send_signal_mockedz#TestProcess.test_send_signal_mocked   s    nnZZ'%++r*B
 v334c" 5
 ZZ'%++r*B
 v223c" 4
 
	 54
 
 43
 
sH   $D(4DD($E 9D4E D%	!D((D14D=	9E  E	c                 4   t         ddg}| j                  |      }|j                         }|dk(  sJ | j                  |       t         ddg}| j                  |t        j
                        }|j                         }|dk(  sJ | j                  |       t         ddg}| j                  |      }|j                         }|dk(  sJ | j                  |       t         dd	g}| j                  |      }|j                         }|dk(  sJ | j                  |       y )
N-cpassr   z1 / 0)stderr   zimport sys; sys.exit(5);   zimport os; os._exit(5);)r!   rC   rO   rS   
subprocessPIPE)r>   cmdrK   rU   s       rB   test_wait_exitedzTestProcess.test_wait_exited   s    4(c"vvxqyyq!4)c*//:vvxqyyq!4!;<c"vvxqyyq!4!:;c"vvxqyyq!rW   zfails on NETBSDc                    | j                         }t        r"|j                  t        j                         t        j                  t        j                        5  |j                  d       d d d        |j                  t        j                         t        j                  t        j                        5  |j                  d       d d d        |j                  t        j                         |j                         t        j                   k(  sJ |j                         t        j                   k(  sJ y |j                          t        j                  t        j                        5  |j                  d       d d d        |j                          t        j                  t        j                        5  |j                  d       d d d        |j                          |j                         t        j                  k(  sJ |j                         t        j                  k(  sJ y # 1 sw Y   xY w# 1 sw Y   rxY w# 1 sw Y   xY w# 1 sw Y   xY w)NMbP?)timeout)rC   r   r\   rP   SIGSTOPr,   rH   r9   TimeoutExpiredrO   SIGCONTrQ   suspendresumerY   rJ   s     rB   test_wait_stoppedzTestProcess.test_wait_stopped   s|    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-7H:-I;I-H7:IIIc                 d   | j                         \  }}t        j                  t        j                        5  |j                  d       d d d        t        j                  t        j                        5  |j                  d       d d d        |j                          |j                          |j                         }|j                         }t        r|t        j                   k(  sJ |J y |t        j                  k(  sJ |t        j                  k(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w)N{Gz?)
spawn_children_pairr,   rH   r9   rz   rO   rY   r   rP   rQ   )r>   child
grandchild	child_retgrandchild_rets        rB   test_wait_non_childrenz"TestProcess.test_wait_non_children   s     !446z]]6001JJt 2]]6001OOD! 2 	JJL	#*/// ")))......# 2111s   D4D&D#&D/c                    | j                         }|j                          t        j                  t        j
                        5  |j                  d       d d d        t        j                  t        j
                        5  |j                  d       d d d        t        j                  t              5  |j                  d       d d d        y # 1 sw Y   zxY w# 1 sw Y   IxY w# 1 sw Y   y xY w)Nr   r   )rC   namer,   rH   r9   rz   rO   
ValueErrorrJ   s     rB   test_wait_timeoutz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4C'CC$'C0c                 j   | j                         }t        j                  t        j                        5  |j                  d       d d d        |j                          t        j                         t        z   }t        j                         |k  r	 |j                  d      }n| j                  d      t        r|t        j                   k(  sJ |t        j                  k(  sJ | j                  |       y # 1 sw Y   xY w# t        j                  $ r Y nw xY wt        j                         |k  r)Nr   rx   )rC   r,   rH   r9   rz   rO   rN   timer   failr   rP   rR   rQ   rS   )r>   rK   stop_atrU   s       rB   test_wait_timeout_nonblockingz)TestProcess.test_wait_timeout_nonblocking   s    ]]6001FF1I 2	))+.iikG#vvay ))I&&FNN?***6>>)))q!! 21 (( 	 iikG#s   C7D 7D DDc                 j   t        j                         }|j                  d       |j                  d       t        d      D ]-  }|j                  d       }t	        |t
              sJ |dk\  r-J  t        j                  t              5  |j                  d       d d d        y # 1 sw Y   y xY w)Nrw   )intervald           r   )	r9   r:   cpu_percentrange
isinstancefloatr,   rH   r   )r>   rK   _percents       rB   test_cpu_percentzTestProcess.test_cpu_percent   s    NN	u%	u%sAmmTm2Ggu---c>!>  ]]:&MM2M& '&&s   B))B2c                     t        j                  dd       5 }t        j                         j	                          |j
                  sJ 	 d d d        y # 1 sw Y   y xY w)Nzpsutil.cpu_count)return_value)r*   re   r9   r:   r   called)r>   ms     rB   test_cpu_percent_numcpus_nonez)TestProcess.test_cpu_percent_numcpus_none  s=    ZZ*>!NN((*88O8 ?>>s   1AAzQEMU user not supportedc           
         t        j                         j                         }|j                  dk\  sJ |       |j                  dk\  sJ |       |j
                  dk\  sJ |       |j                  dk\  sJ |       t        r|j                  dk\  sJ |       |j                  D ]5  }t        j                  dt        j                  t        ||                   7 y )Nr   z%H:%M:%S)r9   r:   	cpu_timesusersystemchildren_userchildren_systemr   iowait_fieldsr   strftime	localtimegetattr)r>   timesr   s      rB   test_cpu_timeszTestProcess.test_cpu_times  s     **,zzS '%' ||s")E)"""c)050)$$+2U2+<<3&--&MMDMM*dnnWUD5I&JK "rW   c                 \   t        j                         j                         d d \  }}t        j                         d d \  }}t        ||g      t        ||g      z
  dkD  r| j                  d|d|      t        ||g      t        ||g      z
  dkD  r| j                  d|d|      y )N   皙?
expected: 	, found: )r9   r:   r   rF   r   maxminr   )r>   	user_timekernel_timeutimektimes        rB   test_cpu_times_2zTestProcess.test_cpu_times_2  s    !'!1!;!;!=bq!A	;xxz"1~u
 E"#c9e*<&==D))	JKKe$%[%,@(AASH))LMM IrW   znot supportedc                     t        j                         }|j                         }|dk\  sJ t        j                         dk(  r|dk(  sJ |j                         t	        t        j                               v sJ y Nr   rp   )r9   r:   cpu_num	cpu_countr   )r>   rK   nums      rB   test_cpu_numzTestProcess.test_cpu_num(  sb    NNiikaxx"!8O8yy{eF$4$4$67777rW   c                 4   | j                         }t        j                         }|j                         }t        ||z
        }|dkD  r| j	                  d|d|d|      t        j
                  dt        j                  |j                                      y )Nr   r   r   z, difference: z%Y %m %d %H:%M:%S)rC   r   create_timeabsr   r   r   )r>   rK   nowr   
differences        rB   test_create_timezTestProcess.test_create_time1  s{    iikmmo
 s*+
>))Z1  	)4>>!--/+JKrW   z
POSIX onlyc                     t        j                         j                         }|1	 t        j                  j                  t        d            }||k(  sJ y y # t        $ r t        j                  d      w xY w)Nttyzcan't rely on `tty` CLI)
r9   r:   terminalrF   pathrealpathr0   RuntimeErrorr,   skip)r>   r   r   s      rB   test_terminalzTestProcess.test_terminalC  sn    >>#,,.'gg&&r%y1
  3&     =kk";<<=s   (A A6)only_ifc                    t        j                         }|j                         }t        t        d      5 }|j                          d d d        |j                         }t        sxt        sr|j                  |j                  kD  sJ |j                  |j                  k(  sJ t        rl|j                  |j                  kD  sJ |j                  |j                  k(  s8J |j                  |j                  k\  sJ |j                  |j                  k\  sJ |j                         }t        | j                         d      5 }t         r|j#                  t%        ddz  d             n|j#                  ddz         d d d        |j                         }|j                  |j                  k\  sJ |j                  |j                  k\  sJ |j                  |j                  k\  sJ |j                  |j                  k\  sJ t        r6|j                  |j                  kD  sJ |j                  |j                  k\  sJ t'        t)        |            D ]"  }t        r|dk\  r||   dk\  sJ ||   dk\  r"J  y # 1 sw Y   ,xY w# 1 sw Y   	xY w)Nrbwbxi@B asciir   r   )r9   r:   io_countersopenr!   readr   r   
read_countwrite_countr   
read_charswrite_chars
read_byteswrite_bytes
get_testfnr   writebytesr   len)r>   rK   io1fio2is         rB   test_io_counterszTestProcess.test_io_countersO  s    NNmmo*d#qFFH $mmo3>>CNN222??coo555~~666#//999>>S^^333??coo555 mmo$//#T*acGmW56g&	 +
 mmo#//111#//111~~///~~///??S__444>>S^^333 s3xAqAvq6Q;;q6Q;; != $# +*s   I0<:I=0I:=Jz
linux onlyc                    fd}t        j                         t        s&j                         d   t         j                  k(  sJ t         j                  dk(  sJ t         j
                  dk(  sJ t         j                  dk(  sJ t         j                  dk(  sJ j                         }| j                  ||       j                  t         j                         t        j                               t         j                  dfk(  sJ t        j                  t              5  j                  t         j                  d       d d d        j                  t         j                         t        j                               t         j                  dfk(  sJ j                  t         j                  d       t        j                               t         j                  dfk(  sJ t        j                  t              5  j                  t         j                  d       d d d        	 j                  t         j
                  d       t        j                  t        d	
      5  j                  t         j                  d       d d d        t        j                  t        d	
      5  j                  t         j                  d       d d d        t        j                  t        d
      5  j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# t         j                  $ r Y w xY w# 1 sw Y   xY w# 1 sw Y   ~xY w# 1 sw Y   y xY w)Nc                 ^    | \  }}|t         j                  k(  rd}j                  ||       y Nr   )r9   IOPRIO_CLASS_NONEionice)initioclassvaluerK   s      rB   cleanupz.TestProcess.test_ionice_linux.<locals>.cleanup}  s-    !NGU&222HHWe$rW   r   rp   r         r      zioclass accepts no valuematchz$'ioclass' argument must be specified)r9   r:   r   r   r   IOPRIO_CLASS_RTIOPRIO_CLASS_BEIOPRIO_CLASS_IDLE
addCleanuptupler,   rH   r   rj   )r>   r   r   rK   s      @rB   test_ionice_linuxzTestProcess.test_ionice_linuxz  sz   	% NN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   #"L"L-!L& )!L?-!M1MLL#&L<;L<?MMM z!not supported on this win versionc                    t        j                         }t        s#|j                         t         j                  k(  sJ |j                         }| j                  |j                  |       |j                  t         j                         |j                         t         j                  k(  sJ |j                  t         j                         |j                         t         j                  k(  sJ 	 |j                  t         j                         |j                         t         j                  k(  sJ t        j                  t        d      5  |j                  t         j                  d       d d d        t        j                  t        d      5  |j                  t         j                  dz          d d d        y # t         j                  $ r Y w xY w# 1 sw Y   ixY w# 1 sw Y   y xY w)Nz&value argument not accepted on Windowsr   rp   r   zis not a valid priority)r9   r:   r   r   IOPRIO_NORMALr   IOPRIO_VERYLOW
IOPRIO_LOWIOPRIO_HIGHrj   r,   rH   	TypeErrorr   )r>   rK   r   s      rB   test_ionice_winzTestProcess.test_ionice_win  sf   
 NN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*   /F= "G#G"=GGG"G+c                    dd l }t        j                  t        j                               }t        t              D cg c]  }|j                  d      s| }}|sJ |       |D ]  }t        t        |      }|dk\  sJ |t        |      v r>|t        ||      k(  sJ t        r?|j                  |      |j                  |      k(  rcJ |j                  |      }t        |      dk(  sJ |d   dk\  sJ |d   dk\  rJ  y c c}w )Nr   RLIMITr   r   rp   )resourcer9   r:   rF   rG   dir
startswithr   r    rlimit	getrlimitr   )r>   r  rK   r   namesr   r   rets           rB   test_rlimit_getzTestProcess.test_rlimit_get  s    NN299;'KBKq1<<+AKBeuDFD)EA::s8}$$ 7777 xx(*<*<U*CCCChhuo3x1}$}1v|#|1v|#|  Cs   DDc                    | j                         }|j                  t        j                  d       |j                  t        j                        dk(  sJ t        rRt        j                  t        d      5  t        j                  j                  d      j                  d       d d d        t        j                  t              5  |j                  t        j                  d       d d d        y # 1 sw Y   LxY w# 1 sw Y   y xY w)N)rq   rq   zcan't use prlimitr   r   )rq   rq   rq   )
rC   r  r9   RLIMIT_NOFILEr   r,   rH   r   _psplatformr:   rJ   s     rB   test_rlimit_setzTestProcess.test_rlimit_set  s    	%%v.xx,,-777 z1DE""**1-44Q7 F]]:&HHV))95 '& FE&&s   6/C0!C<0C9<Dc                    t        j                         }| j                         }|j                  t         j                        \  }}	 |j                  t         j                  d|f       t        |d      5 }|j                  d       d d d        t        j                  t              5 }t        |d      5 }|j                  d       d d d        d d d        t        rj                  j                  nj                  d   t        j                  k(  sJ 	 |j                  t         j                  ||f       |j                  t         j                        ||fk(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# |j                  t         j                  ||f       |j                  t         j                        ||fk(  sJ w xY w)N   r   s   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXs  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr   )r9   r:   r   r  RLIMIT_FSIZEr   r   r,   rH   IOErrorr   r   rg   EFBIG)r>   rK   testfnsofthardr   excs          rB   test_rlimitzTestProcess.test_rlimit  sW   NN"XXf112
d	AHHV((4,7fd#q$ $ w'3&$'1GGK( ( ( (+CIIOO		!LLLHHV((4,788F//0T4L@@@ $#
 (' ('
 HHV((4,788F//0T4L@@@sV   .F 6E !F )E86E,E8AF  E)%F ,E5	1E88F=F A
Gc                    t        j                         }|j                  t         j                        \  }}	 |j                  t         j                  d|f       |j                  t         j                  t         j                  |f       t        | j                         d      5 }|j                  d       d d d        |j                  t         j                  ||f       |j                  t         j                        ||fk(  sJ y # 1 sw Y   RxY w# |j                  t         j                  ||f       |j                  t         j                        ||fk(  sJ w xY w)Nr  r   s   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)r9   r:   r  r  RLIM_INFINITYr   r   r   )r>   rK   r  r  r   s        rB   test_rlimit_infinityz TestProcess.test_rlimit_infinity  s	    NNXXf112
d	AHHV((4,7HHV((6+?+?*FGdoo'.!$ / HHV((4,788F//0T4L@@@	 /. HHV((4,788F//0T4L@@@s%   A,D $D6D DD A
Ec                     t        j                         }|j                  t         j                        \  }}|t         j                  k(  sJ |j                  t         j                  ||f       y r7   )r9   r:   r  r  r  )r>   rK   r  r  s       rB   test_rlimit_infinity_valuez&TestProcess.test_rlimit_infinity_value  sT     NNXXf112
dv+++++	$$tTl3rW   c                 H   t        j                         }t        r	 |j                         }n|j                         }t               5  |j                         }||dz   k(  sJ 	 d d d        y # t         j                  $ r t        j                  d      w xY w# 1 sw Y   y xY w)N$on OpenBSD this requires root accessrp   )r9   r:   r	   num_threadsrj   r,   r   r%   )r>   rK   step1step2s       rB   test_num_threadszTestProcess.test_num_threads  s     NNJ MMOE\MMOEEAI%%% \ && Jkk"HIIJ
 \s   A, B,)BB!zWINDOWS onlyc                 V    t        j                         }|j                         dkD  sJ y r   )r9   r:   num_handlesrJ   s     rB   test_num_handleszTestProcess.test_num_handles)  s$     NN}}"""rW   c                    t        j                         }t        r	 |j                         }n|j                         }t               5  |j                         }t        |      t        |      dz   k(  sJ |d   }|j                  |d   k(  sJ |j                  |d   k(  sJ |j                  |d   k(  sJ 	 d d d        y # t         j                  $ r t        j                  d      w xY w# 1 sw Y   y xY w)Nr   rp   r   r   )r9   r:   r	   threadsrj   r,   r   r%   r   idr   system_time)r>   rK   r"  r#  athreads        rB   test_threadszTestProcess.test_threads/  s    NNJ		 IIKE\IIKEu:Ua///AhG::+++$$
222&&'!*444 \ && Jkk"HIIJ
 \s   B? A.C+?)C(+C4c           	      &   | j                         }t        r	 |j                          t        |j                         j                  t        |j                         D cg c]  }|j                   c}      z
        dk  sJ t        |j                         j                  t        |j                         D cg c]  }|j                   c}      z
        dk  sJ y # t        j                  $ r t        j                  d      w xY wc c}w c c}w )Nr   r   )rC   r	   r)  r9   rj   r,   r   r   r   r   sumr   r   r+  )r>   rK   r   s      rB   test_threads_2zTestProcess.test_threads_2C  s     J		 ""Sqyy{)K{!!++{)K%LLM	
 $$aiik:kq}}k:;< 		
 && Jkk"HIIJ *L ;s   C D	7D)Dc                    t        j                         }|j                         d d \  }}|j                         }|dkD  sJ |dkD  sJ d gdz  }|j                         d d \  }}|j                         }||kD  sJ ||k\  sJ ||kD  sJ ~t        rF|j                         }	|	j
                  |	j                  k(  sJ |	j                  |	j                  k(  sJ |j                         }	|	j                  D ]  }
t        |	|
      dk\  rJ  y )Nr   r   i` )r9   r:   memory_infomemory_percentr   rsswsetvmspagefiler   r   )r>   rK   rss1vms1percent1memarrrss2vms2percent2memr   s              rB   test_memory_infozTestProcess.test_memory_infoY  s   NN ]]_Ra(
d##%axxaxx '!]]_Ra(
d##% d{{t||("""--/C77chh&&&77cll***mmoKKD3%***  rW   c                    t        j                         }t        j                         j                  }|j	                         }|j
                  D ].  }t        ||      }|dk\  sJ |dk(  rt        st        r(||k  r.J  t        st        st        r|j                  dk\  sJ t        r#|j                  dk\  sJ |j                  dk\  sJ y y )Nr   r6  )r9   r:   virtual_memorytotalmemory_full_infor   r   r
   r   r   r   usspssswap)r>   rK   rC  r?  r   r   s         rB   test_memory_full_infoz!TestProcess.test_memory_full_infox  s    NN%%'--  "KKDC&EA::u}E>!>   Gu77a<<77a<<88q= = rW   c                    t        j                         }|j                         }t        |      t        t	        |            k(  sJ |j                  d      }|D ]V  }|j
                  j                  d      r t        rd|j
                  v r5t        j
                  j                  |j
                        sJ |j
                         t        re	 t        j
                  j                  |j
                        s:t        j
                  j                  |j
                        sJ |j
                         dt        j
                  j#                  |j
                        vs	 t        j$                  |j
                        }t%        j&                  |j(                        rHJ |j
                          |D ]W  }|j,                  D ]F  }t/        ||      }	|dk(  r|d	v r
|	rJ |	       t1        |	t2        t4        f      sJ |	d
k\  rAJ |	        Y y # t        $ rN t        s t        d      5 }|j!                         }d d d        n# 1 sw Y   nxY wd|j
                  z  vr Y w xY w# t*        $ r Y w xY w)NF)grouped[z
/bin/qemu-z/proc/self/smapsz%s (deleted)64r   >   addrpermsr   )r9   r:   memory_mapsr   setr   r  r#   rF   isabsr   existsislinkAssertionErrorr   r   r   basenamestatS_ISREGst_moder   r   r   r   intr   )
r>   rK   mapsext_mapsntr   datastfnamer   s
             rB   test_memory_mapszTestProcess.test_memory_maps  s   NN}}4yCD	N***===/B77%%c*!8ww}}RWW-6rww6-&!ww~~bgg6"''..GG; #77#   !1!1"''!::AWWRWW-  $||BJJ7@@79 : BE*F?-- '%'5%ec4[999 A:,u,: $ ' * &$! "++=!>!'(vvx "?!>!>-7tC %  D& - s=   A#H#I,I)-I>	I)II)(I),	I98I9c                     t        j                         }t               5 }d }|j                         D cg c]  } ||j                         }} ||      |v sJ 	 d d d        y c c}w # 1 sw Y   y xY w)Nc                 z    t         j                  j                  t         j                  j                  |             S r7   )rF   r   r   normcaserK   s    rB   normpathz8TestProcess.test_memory_maps_lists_lib.<locals>.normpath  s&    ww''(8(8(;<<rW   )r9   r:   r'   rO  r   )r>   rK   r   re  r   libpathss         rB   test_memory_maps_lists_libz&TestProcess.test_memory_maps_lists_lib  sk     NN "d= 34--/B/Q(/HBD>X--- #"
 C #"s   A+A&A+&A++A4c                    t        j                         }|j                          t        j                  t
              5  |j                  d       d d d        t        st        st        r|j                  d       y y # 1 sw Y   /xY w)Nz?!?)memtyperE  )	r9   r:   r3  r,   rH   r   r   r   r   rJ   s     rB   test_memory_percentzTestProcess.test_memory_percent  sb    NN	]]:&U+ 'EWU+ % '&s   A??Bc                     | j                         }|j                         sJ |j                         sJ |j                          |j                          |j                         rJ |j                         rJ y r7   )rC   
is_runningrN   rO   rJ   s     rB   test_is_runningzTestProcess.test_is_running  s^    ||~~||~~		<<>!!<<>!!>rW   c                    | j                         }|j                         }	 |t        k(  sJ 	 t        |ddg      }|dk(  sJ y # t        $ r t        rLt        |      t        t              k(  r1t        j                  j                  } ||       |t              k(  sgJ t        j                  d   dt        j                  d   }	 |j                  |d      t        j                  |d      k(  sJ n# t        $ r Y nw xY wY w xY w)Nr   .rp   rb   rm   zimport os; print('hey')hey)rC   exer!   rT  r   r   rF   r   rc  sysversion_inforeplacer0   )r>   rK   rq  rc  verouts         rB   test_exezTestProcess.test_exe  s    eeg	*$$$( #t678e||)  	3s8s:677++}(<<<< "%!1!1!!4c6F6Fq6IJ;;sB/:3E3Ec23NNNN% 	s6   A BD	+C54D5	D>D DDDc                    t         ddg}| j                  |      }t        r(|j                         g k(  rt	        j
                  d      t        st        st        r|j                         d   t         k(  sJ y t        r\t        rV|j                         d   }|t         k7  r:dj                  |j                         dd        dj                  |dd        k(  sJ y t        r7dj                  |j                         dd        dj                  |      k(  sJ y dj                  |j                               dj                  |      k(  sJ y )Nrm   2import time; [time.sleep(0.1) for x in range(100)]OPENBSD: returned EBUSYr    rp   r   )r!   rC   r   cmdliner,   r   r	   r   r   r   joinr#   )r>   r|  rK   pyexes       rB   test_cmdlinezTestProcess.test_cmdline  s   @

 g&aiikR'++788 W99;q>Z///		AJ&88AIIKO48MMMMxx		AB0CHHW4EEEE88AIIK(CHHW,====rW   zbroken on PYPYc                    t         g}|j                  dgdz         |j                  ddg       | j                  |      }t        r	 |j	                         |k(  sJ y t        r|j	                         dd  |k(  sJ y |j	                         }t        r|g k(  rt        j                  d      ||k(  sJ y # t
        j                  $ r t        j                  d      w xY w)Nz-v2   rm   ry  z#OPENBSD: process turned into zombier   rz  )r!   extendrC   r	   r|  r9   ZombieProcessr,   r   r#   r   )r>   r|  rK   r
  s       rB   test_long_cmdlinezTestProcess.test_long_cmdline  s    ,v{#GH	
 g&Iyy{g--- 99;qr?g---))+C#)kk";<<'>!> '' Ikk"GHHIs   B5 5)Cc                 D   | j                         }|j                         j                         }t        j                  j                  t        j                  j                  t        j                              j                         }|j                  |      s	J ||f       y r7   )
rC   r   lowerrF   r   rU  r   rr  
executabler  )r>   rK   r   r~  s       rB   	test_namezTestProcess.test_name&  so    vvx~~  !1!1#..!ABHHJ%4t}4%rW   zunreliable on PYPYzunreliable on QEMU userzbroken MACOS + PY2c                 >   t        | j                  t        j                  dz              }|ddg}| j	                  |      }t
        r4	 |j                         t        j                  j                  |      k(  sJ y |j                         t        j                  j                  |      k(  sJ y # t        $ rc |j                         t        j                  k(  r>t        j                  j                  |      j                  |j                               sJ  Y y w xY w)Nr   )suffixrm   ry  )r)   r   stringdigitsrC   r	   r   rF   r   rU  rT  statusr9   STATUS_ZOMBIEr  )r>   r~  r|  rK   s       rB   test_long_namezTestProcess.test_long_name,  s     dooV]]Q5FoGH@

 g&vvx277#3#3E#:::: 668rww//6666 " 88:!5!5577++E2==affhGGG Hs   
2B0 0A)DDc                 (   t        j                         }|j                         \  }}}|t        j                         k(  sJ |t        j
                         k(  sJ t        t        d      r(t        j                         |j                         k(  sJ y y N	getresuid)r9   r:   uidsrF   getuidgeteuidhasattrr  r>   rK   real	effective_saveds        rB   	test_uidszTestProcess.test_uids_  s    NN"#&&(iryy{"""BJJL((( 2{#<<>QVVX--- $rW   c                 (   t        j                         }|j                         \  }}}|t        j                         k(  sJ |t        j
                         k(  sJ t        t        d      r(t        j                         |j                         k(  sJ y y r  )r9   r:   gidsrF   getgidgetegidr  	getresgidr  s        rB   	test_gidszTestProcess.test_gidsm  r  rW   c                 f   fd}t        j                         t        j                  t              5  j                  d       d d d        j                         }| j                  ||       t        rd }t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  fD ]  }| j                  |      5  	 j                  |       j                         }|t         j                  t         j                  t         j                  hv r||k(  s||}||k(  s	J ||k(  sJ d d d         y 	 t!        t"        d      rIt#        j$                  t"        j&                  t#        j(                               j                         k(  sJ j                  d       j                         dk(  sJ t!        t"        d      rIt#        j$                  t"        j&                  t#        j(                               j                         k(  sJ t*        s'j                  d       j                         dk(  sJ y y # 1 sw Y   "xY w# t         j                  $ r Y 5w xY w# 1 sw Y   xY w# t         j                  $ r Y y w xY w)Nc                 \    	 j                  |        y # t        j                  $ r Y y w xY wr7   )nicer9   rj   )r   rK   s    rB   r   z&TestProcess.test_nice.<locals>.cleanup|  s+    t&& s    ++str)priogetpriorityrp   r   )r9   r:   r,   rH   r   r  r   r   IDLE_PRIORITY_CLASSBELOW_NORMAL_PRIORITY_CLASSNORMAL_PRIORITY_CLASSABOVE_NORMAL_PRIORITY_CLASSHIGH_PRIORITY_CLASSREALTIME_PRIORITY_CLASSsubTestrj   r  rF   r  PRIO_PROCESSrG   r   )r>   r   r   highest_prior  new_priorK   s         @rB   	test_nicezTestProcess.test_nice{  s)   	 NN]]9%FF5M &vvx&L**22,,22**.. \\t\,4t $%668
  ">>"66"::$ 
  (4/<3G/3'/<'? ?'?#+t#33#3) -,<2}-r		D668$$ q	vvx1}$}2}-r		D668$$
 FF1I668q=(= i &%$ "..  -,P && sO   I&)J+I3<AJ DJ &I03J
J	J

JJ	J0/J0c                 r    t        j                         }|j                         t         j                  k(  sJ y r7   )r9   r:   r  STATUS_RUNNINGrJ   s     rB   test_statuszTestProcess.test_status  s(    NNxxzV22222rW   c                    | j                         }|j                         }t        r|j                  d      \  }}t	        j
                         }|j                  d      rt        j                  d      ||k(  sJ dt        j                  v r|t        j                  d   k(  sJ y y |t	        j
                         k(  sJ y )N\$zrunning as service account
USERDOMAIN)rC   usernamer   splitgetpassgetuserendswithr,   r   rF   environ)r>   rK   r  domaingetpass_users        rB   test_usernamezTestProcess.test_username  s    ::<'~~d3FH"??,L$$S) kk">??|+++rzz)L!9999 * w0000rW   c                 r    | j                         }|j                         t        j                         k(  sJ y r7   )rC   cwdrF   getcwdrJ   s     rB   test_cwdzTestProcess.test_cwd  s*    uuw"))+%%%rW   c                 V    t         ddg}| j                  |      t        fd       y )Nrm   zFimport os, time; os.chdir('..'); [time.sleep(0.1) for x in range(100)]c                       j                         t        j                  j                  t        j                               k(  S r7   )r  rF   r   dirnamer  rd  s   rB   <lambda>z(TestProcess.test_cwd_2.<locals>.<lambda>  s#    1557bggoobiik&BBrW   )r!   rC   r&   )r>   rt   rK   s     @rB   
test_cwd_2zTestProcess.test_cwd_2  s0    	
 c"BCrW   c           	      `   t        j                         }|j                         }|sJ |       | j                  |j                  |       t	        t
        d      r-|t        t        j                  |j                              k(  sJ t        |      t        t        |            k(  sJ t        t        t        t        j                  d                        }|D ]  }|j                  |g       |j                         |gk(  sJ t	        t
        d      r;|j                         t        t        j                  |j                              k(  sJ t	        |d      s|j                         d   |j                         k(  rJ  |j                  g        t        r-|j                         |j                  j!                         k(  sJ |j                         |k(  sJ t	        t
        d      r;|j                         t        t        j                  |j                              k(  sJ t#        j$                  t&              5  |j                  d       d d d        |j                  |       |j                  t        |             |j                  t)        |             y # 1 sw Y   OxY w)Nsched_getaffinityTpercpunum_cpur   rp   )r9   r:   cpu_affinityr   r  rF   listr  r;   r   rP  r   r   r  r   _proc_get_eligible_cpusr,   rH   r   r   )r>   rK   initialall_cpusns        rB   test_cpu_affinityzTestProcess.test_cpu_affinity  s   NN.."w02*+d2#7#7#>????7|s3w<0000c&"4"4D"ABCDANNA3>>#s***r./~~'40D0DQUU0K+LLLLq)$~~'*aiik999  	
r>>#qww'A'A'CCCC>>#x///2*+>>#tB,@,@,G'HHHH]]9%NN1 &	w	s8}%	uX' &%s   J$$J-c                 ~   | j                         }t        t        j                  d            dz   g}t	        j
                  t              5  |j                  |       d d d        t	        j
                  t              5  |j                  t        dd             d d d        t	        j
                  t              5  |j                  ddg       d d d        t	        j
                  t              5  |j                  ddg       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   WxY w# 1 sw Y   y xY w)	NTr  
   i'  i*  r   1r   )
rC   r   r9   r   r,   rH   r   r  r   r   )r>   rK   invalid_cpus      rB   test_cpu_affinity_errsz"TestProcess.test_cpu_affinity_errs
  s    6++489B>?]]:&NN;' ']]:&NN5./ ']]9%NNAs8$ &]]:&NNAr7# '& '&&&%%&&s0   D D=D'2D3DD$'D03D<c                    t        j                         }|j                         }|sJ |       | j                  |j                  |       t	        |      dkD  r|d d }g }t        t	        |      dz         D ]:  }t        j                  ||      D ]  }|s|j                  t        |             ! < |D ]:  }|j                  |       t        |j                               t        |      k(  r:J  y )N   rp   )r9   r:   r  r   r   r   	itertoolscombinationsappendr  sorted)r>   rK   r  combosr   subsetcombos          rB   "test_cpu_affinity_all_combinationsz.TestProcess.test_cpu_affinity_all_combinations  s    NN.."w0 w<"crlGs7|a'(A#00!<MM$v,/ = )
 ENN5!!..*+ve}<<< rW   zbroken on BSDzunreliable on APPVEYORc                    t        j                         | j                         }j                         |vsJ t	        |d      5 }|j                  d       |j                          t        fd       j                         D cg c]+  }t        j                  j                  |j                        - }}t        j                  j                  |      |v sJ t        r(D ]#  }|j                  |k(  s|j                  dk(  r#J  d d d        D ]2  }t        j                  j                  |j                        r-J |        d|z  }| j                  t        d|g      t!        d      D ]a  }j                         D cg c]+  }t        j                  j                  |j                        - }}||v r n:t#        j$                  d       c t        j                  j                  |      v sJ |D ](  }t        j                  j                  |      r#J |        y c c}w # 1 sw Y   #xY wc c}w )	Nr   s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc                  N    t        j                               t               k7  S r7   )r   
open_files)filesrK   s   rB   r  z-TestProcess.test_open_files.<locals>.<lambda>8  s    s1<<>2c%j@rW   r  zIimport time; f = open(r'%s', 'r'); [time.sleep(0.1) for x in range(100)];rm   r   r   )r9   r:   r   r  r   r   flushr&   rF   r   rc  r   positionisfilerC   r!   r   r   sleep)	r>   r  r   r   	filenamesfiler|  r  rK   s	          @@rB   test_open_fileszTestProcess.test_open_files,  s    NN"U"""&$1GGK GGI@ALLNE;@A5a))!&&15IA77##F+y888!DyyF*#}}444 "   D77>>$)),2d2, 
$% 	 z49:sA;<<<>J>a))!&&1>IJ"JJt	  77##F+y888D77>>$'--' / B  . Ks1   	AH20H->?H2>H2H20H?-H22H<c                 8   t        j                         }t        j                  j                  }| j                         }t        |d      5 }|j                         D ]F  } ||j                         ||j                        k(  s|j                  |j                         k(  sF n, | j                  dt        |j                               z         ||j                         ||j                        k(  sJ t        r|j                  dk(  s!J |j                  |j                         k(  sJ |j                         d   }|d   |j                  k(  sJ |d   |j                  k(  sJ |j                  |j                         vsJ 	 d d d        y # 1 sw Y   y xY w)Nwzno file found; files=%sr   r   rp   )r9   r:   rF   r   rc  r   r   r  r   fdfilenor   reprr   )r>   rK   rc  r  fileobjr  ntuples          rB   test_open_files_2zTestProcess.test_open_files_2U  sK   
 NN77##"&#'TYY'8GLL+AAww'.."22 ' ii-alln1EF  DII&(7<<*@@@@ww"}$}ww'.."2222\\^A&F!9+++!9		)))<<q||~555+ s   AF"C$FFc                    t        j                         }| j                         }|j                         }t	        |d      }| j                  |j                         |j                         |dz   k(  sJ t        j                         }| j                  |j                         |j                         |dz   k(  sJ |j                          |j                          |j                         |k(  sJ y )Nr  rp   r   )r9   r:   r   num_fdsr   r   closesocket)r>   rK   r  startr  socks         rB   test_num_fdszTestProcess.test_num_fdst  s    NN"		FC 

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

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



yy{e###rW   z not reliable on OPENBSD & NETBSDc                    t        j                         }t        |j                               }t	        d      D ]7  }t        j                  d       t        |j                               }||kD  s7 y  | j                  d      )Nr   g?z2num ctx switches still the same after 2 iterations)r9   r:   r/  num_ctx_switchesr   r   r  r   )r>   rK   beforer   afters        rB   test_num_ctx_switchesz!TestProcess.test_num_ctx_switches  sl    
 NNQ'')*qAJJt**,-Ev~	 
 iiLMMrW   c                    t        j                         }t        t        d      r'|j	                         t        j
                         k(  sJ | j                         }|j	                         t        j                         k(  sJ y )Ngetppid)r9   r:   r  rF   ppidr	  rC   rG   rJ   s     rB   	test_ppidzTestProcess.test_ppid  sZ    NN2y!668rzz|+++vvx299;&&&rW   c                     | j                         }|j                         j                  t        j                         k(  sJ t        j                         d   }t        j                  |      j                         J y r   )rC   parentr;   rF   rG   r9   pidsr:   )r>   rK   
lowest_pids      rB   test_parentzTestProcess.test_parent  s\    xxz~~,,,[[]1%
~~j)002:::rW   c                     t        j                         }| j                         \  }}|j                         |k(  sJ |j                         |k(  sJ y r7   )r9   r:   r   r  r>   r  r   r   s       rB   test_parent_multizTestProcess.test_parent_multi  sL    ! 446z  "e+++||~'''rW   c                    t        j                         }|j                         sJ | j                         \  }}|j                         d   |k(  sJ |j                         d   |k(  sJ |j                         d   |k(  sJ y r   )r9   r:   parentsr   r  s       rB   test_parentszTestProcess.test_parents  s     !~~ 446z}}q!V+++!!#A&%///!!#A&&000rW   c                    t        j                         }|j                         g k(  sJ |j                  d      g k(  sJ | j                  d      }|j                         }|j                  d      }||fD ]R  }t	        |      dk(  sJ |d   j
                  |j
                  k(  sJ |d   j                         |j
                  k(  rRJ  y )NT	recursiver   )creationflagsrp   )r9   r:   childrenrC   r   r;   r
  )r>   r  r   	children1	children2r  s         rB   test_childrenzTestProcess.test_children  s    ! B&&&."444 !!!2OO%	OOdO3	"I.Hx=A%%%A;??eii///A;##%333 /rW   c                    t        j                         }| j                         \  }}|j                         |gk(  sJ |j                  d      ||gk(  sJ |j	                          |j                          |j                  d      g k(  sJ y )NTr  )r9   r:   r   r  rY   rO   r  s       rB   test_children_recursivez#TestProcess.test_children_recursive  s     ! 446z UG+++.5*2EEEE 	

."444rW   c                    t        j                  t              }t        j                         D ]  }	 ||j                         xx   dz  cc<     t        |j                         d       d   d   }t        r|dk(  rt        j                  d      t        j                  |      }	 |j                  d      }t        |      t        t        |            k(  sJ y # t        j                  $ r Y w xY w# t        j                   $ r Y y w xY w)	Nrp   c                     | d   S )Nrp    )r   s    rB   r  z6TestProcess.test_children_duplicates.<locals>.<lambda>  s    !A$rW   )keyr   r   zPID 0Tr  )collectionsdefaultdictrY  r9   process_iterr
  Errorr  itemsr   r,   r   r:   r  r   rP  rj   )r>   tablerK   r;   cs        rB   test_children_duplicatesz$TestProcess.test_children_duplicates  s    '',$$&Aaffh1$ ' U[[]7;A>SAX++g&&NN3	)

T
*A q6SQ[((( <<  "" 		s#   C'C5 C21C25D
Dc                    t        j                         }| j                         \  }}|j                  d      }t	        |      dk(  sJ |d   |k(  sJ |d   |k(  sJ |j                         }|d   |k(  sJ |d   |k(  sJ y )NTr  r   r   rp   )r9   r:   r   r  r   r  )r>   r  r   r   r  r  s         rB   test_parents_and_childrenz%TestProcess.test_parents_and_children  s    ! 446z??T?28}!!!{e###{j((($$&qzU"""qzV###rW   c                 :   | j                         }|j                          t        d      D ]:  }|j                         t        j
                  k(  r nt        j                  d       < |j                          |j                         t        j
                  k7  sJ y )Nr   r   )	rC   r|   r   r  r9   STATUS_STOPPEDr   r  r}   )r>   rK   r   s      rB   test_suspend_resumezTestProcess.test_suspend_resume  so    			sAxxzV222JJt  	

xxzV22222rW   c                    t        j                  t              5  t        j                  d       d d d        t        j                  t
              5  t        j                  d       d d d        y # 1 sw Y   AxY w# 1 sw Y   y xY w)Nr  r   )r,   rH   r   r9   r:   r   r>   s    rB   test_invalid_pidzTestProcess.test_invalid_pid  sO    ]]9%NN3 &]]:&NN2 '& &%&&s   A0A<0A9<Bc                    t        j                         }|j                  ddg      }t        |j	                               ddgk(  sJ t        j                  t        t        j                                     }|j                  dgd      }t        |d   t              s
|d   dk(  sJ t        j                  ddt         j                  	      5  |j                  d
gd      d
dik(  sJ 	 d d d        t        j                  ddt        j                  |j                  d      	      5  t        j                  t         j                        5  |j                  d
g       d d d        d d d        t        j                  ddt        j                   |j                  d      	      5  |j                  d
gd      d
dik(  sJ 	 d d d        t        j                  ddt"        	      5  |j                         }d
t        |j	                               vsJ t        j                  t"              5  |j                  d
g       d d d        d d d        t        j                  t$              5  |j                  d       d d d        t        j                  t&              5  |j                  dg       d d d        t        j                  t&              5  |j                  ddg       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   UxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nrq  r   )attrsnet_connectionsfoo)r6  ad_valuezpsutil.Process.niceT)createrd   r  rp   bar)r9   r:   as_dictr  keysr   r  r   r  r*   re   rj   r<   r;   r,   rH   r  NotImplementedErrorr   r   )r>   rK   ds      rB   test_as_dictzTestProcess.test_as_dict  s   NNIIUFOI,affhE6?222NN3v{{}-.II./%I@!-.5&'5000 ZZ!$F<O<O
 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   K2+$LK?#L)L*AL21L&L2.L>!M
M2K<?L		LLL#&L/	+L22L;>M
MMc                    t        j                         }t        j                  d      5 }|j	                         5  |j                          |j                          d d d        |j                  dk(  sJ 	 d d d        t        j                  d      5 }|j                          |j                          d d d        j                  dk(  sJ y # 1 sw Y   sxY w# 1 sw Y   exY w# 1 sw Y   3xY w)N$psutil._psplatform.Process.cpu_timesrp   r   r9   r:   r*   re   oneshotr   
call_countr>   rK   r   s      rB   test_oneshotzTestProcess.test_oneshot0  s    NNZZ>?1  <<1$$$	 @ ZZ>?1KKMKKM @ ||q     @? @?s.   C!CC!C&C	CC#&C/c           	         t        j                         }t        j                  d      5 }t        j                  d      5 }|j	                         5  |j                          |j                          |j	                         5  |j                          |j                          d d d        d d d        |j                  dk(  sJ |j                  dk(  sJ 	 d d d        d d d        t        j                  d      5 }|j                          |j                          d d d        j                  dk(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w# 1 sw Y   }xY w# 1 sw Y   KxY w)NrB  z(psutil._psplatform.Process.oneshot_enterrp   r   rC  )r>   rK   m1m2r   s        rB   test_oneshot_twicezTestProcess.test_oneshot_twice=  s    NNZZ>?2FG2YY[KKMKKM % ! }})))}}))) H @ ZZ>?1KKMKKM @ ||q    % ![ HG @? @?s_   E E1E!D6	#E+*EE;!E&6D?;EEEE	EE#&E/c                    | j                         \  }}|j                         }|j                         }||k7  sJ |j                         5  |j                         |k(  sJ |j                         |k(  sJ 	 d d d        |j                         5  |j                         |k(  sJ |j                         |k(  sJ 	 d d d        y # 1 sw Y   NxY w# 1 sw Y   y xY wr7   )r   r
  rD  )r>   p1p2p1_ppidp2_ppids        rB   test_oneshot_cachezTestProcess.test_oneshot_cacheQ  s     ))+B'')'')'!!!ZZ\779'''779'''  ZZ\779'''779''' \ \ \s   +C+CCCc                 *     fd} j                         j                          j                          t        rt	        fd        j                         t              }|j                  |j                        D ]  \  }} |||        y )Nc                     	  |        }t         r|dv ry j                  | d|d      # t        j                  $ r  t        j                  $ r Y y t        j
                  $ r t        r|dv rY y  w xY w)N>   rq  r   z didn't raise NSP and returned z instead>   r)  r!  )r   r   r9   r  r<   rj   r	   )funfun_namer
  r>   s      rB   assert_raises_nspzFTestProcess.test_halfway_terminated_process.<locals>.assert_raises_nsph  s    e x?:iiEH#N  '' '' && x+EEs   , &A4A42A4c                  D     j                   t        j                         vS r7   )r;   r9   r  rd  s   rB   r  z=TestProcess.test_halfway_terminated_process.<locals>.<lambda>  s    quuFKKM9rW   )	rC   rY   rO   r   r&   rS   r+   iterall)r>   rV  nsrT  r   rK   s   `    @rB   test_halfway_terminated_processz+TestProcess.test_halfway_terminated_process`  sr    	& 		9:q!q!ICc4( )rW   c                 L    | j                         \  }}| j                  |       y r7   )spawn_zombieassertProcessZombie)r>   _parentzombies      rB   test_zombie_processzTestProcess.test_zombie_process  s"    ++-  (rW   c                     t        j                         }t        j                  dt        j                  d            5 }|j                         sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nzpsutil.Processr   rc   )r9   r:   r*   re   r  rl  r   rF  s      rB   $test_zombie_process_is_running_w_excz0TestProcess.test_zombie_process_is_running_w_exc  sX     NNZZ&*>*>q*A
<<>!>88O8	
 
 
s   !A**A3c                    t        j                         }t        j                  dt        j                  d            5 }|j                         t         j                  k(  sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nz!psutil._psplatform.Process.statusr   rc   )r9   r:   r*   re   r  r  r  r   rF  s      rB    test_zombie_process_status_w_excz,TestProcess.test_zombie_process_status_w_exc  sg     NNZZ/,,Q/
 88:!5!555588O8
 
 
s   2A;;Bc                    t         rddlm} nddlm} | j                         }t	        j
                  |j                        }|j                  |j                         dz   f|_        t        t	        j                                |j                  t        j                  v sJ |j                         rJ t        j                  j                  t        j                   dd      5  t#         |             5 }t        t	        j                                d d d        d d d        d|j                  z  j%                         v sJ |j                  t        j                  vsJ |t	        j
                  |j                        k7  sJ d}t'        |      }|j)                  |j*                  |j,                  z   d	      D ]U  \  }}| j/                  |
      5  t1        j2                  t        j4                  |      5   |        d d d        d d d        W dt7        |      v sJ dt9        |      v sJ t1        j2                  t        j4                  |      5  |j;                          d d d        t1        j2                  t        j4                  |      5  |j=                          d d d        t1        j2                  t        j4                  |      5  |j?                          d d d        t1        j2                  t        j4                  |      5  |jA                          d d d        y # 1 sw Y   xY w# 1 sw Y    xY w# 1 sw Y   ExY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   )StringIOr   PSUTIL_DEBUGTz-refreshing Process instance for reused PID %sz4process no longer exists and its PID has been reusedF)clear_cache)r   r   zterminated + PID reused)!r   iorg  r8   r9   r:   r;   r   _identr  r'  _pmaprl  r*   re   object_commonr   getvaluer+   rX  setterskillersr  r,   rH   r<   r  r  r
  r  r  r  )	r>   rg  subprK   r   msgrZ  rT  r   s	            rB   test_reused_pidzTestProcess.test_reused_pid  s{   #)""$NN488$EE1==?S01V  "#uu$$$<<>!! ZZv~~~tD ,V((*+ - E <aeeC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   #L84L+L8&M:MMMM+M7N+L5	0L88MM
MM	M(+M47N Nc                 J   dt        j                         vrt        j                  t         j                        5  t        j
                  d       d d d        t        j                  d      rJ t        j
                  d      j                         dk(  sJ y t        j
                  d      }t        rt         j                  nt        }t        j                  |      5  |j                          d d d        t        j                  |      5  |j                          d d d        t        j                  |      5  |j                          d d d        t        j                  |      5  |j                          d d d        t        j                  |      5  |j                          d d d        t        j                  |      5  |j!                  t"        j$                         d d d        t'        |      }|j)                  |j*                  |j,                  z         D ]W  \  }}	  |       }|dv r|j.                  dk(  r"J |dk(  r t        rdnd}|j1                         |k(  rGJ |dk(  sO|rRJ |        t2        s0dt        j                         v sJ t        j                  d      sJ y y # 1 sw Y   bxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   mxY w# 1 sw Y   LxY w# 1 sw Y   xY w# t         j                  $ r Y w xY w)Nr   rp   >   r  r  r  zNT AUTHORITY\SYSTEMrootr   )r9   r  r,   rH   r<   r:   
pid_existsr
  r   rj   r   rO   rY   r|   r}   rN   r\   rP   rQ   r+   rX  gettersrp  r  r  r	   )r>   rK   r  rZ  rT  r   r
  r   s           rB   
test_pid_0zTestProcess.test_pid_0  s>   FKKM!v334q! 5 ((+++>>!$))+q000NN1%,f!!*]]3FFH  ]]3KKM  ]]3IIK  ]]3HHJ  ]]3FFH  ]]3MM&..)   q!bjj!89IC&e ++88q=(=Z'5<1&D::<4///V^%%4 : %%%$$Q''' O 54   && se   J0J=K
:K(K$K1 K>&L0J:=K
KK!$K.1K;>LL"!L"c                     d }d | _         t        j                         } ||j                               } |t        j                  j                               }t        st        r||k(  sJ y y y )Nc                 V   g d}t         r|j                  g d       |D ]  }| j                  |d         t        | j	                         D cg c]I  \  }}|j                  dd      j                  dd      |j                  dd      j                  dd      fK c}}      S c c}}w )N)PLATHOMEPYTEST_CURRENT_TESTPYTEST_VERSION)__CF_USER_TEXT_ENCODINGVERSIONER_PYTHON_PREFER_32_BITVERSIONER_PYTHON_VERSIONr  rb   
)r   r  popdictr)  rt  )r?  excluder   kvs        rB   
clean_dictz,TestProcess.test_environ.<locals>.clean_dict   s    OG     dD!  
 GGI
 &DAq IIdB'//b9IIdB'//b9 &   s   AB%
)maxDiffr9   r:   r  rF   copyr
   r   )r>   r  rK   d1d2s        rB   test_environzTestProcess.test_environ  sX    	& NN		$

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

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

            int main(void) {
                // Close stderr on exec so parent can wait for the
                // execve to finish.
                if (fcntl(2, F_SETFD, FD_CLOEXEC) != 0)
                    return 0;
                return execve("/bin/cat", argv, envp);
            }
            )c_code)stdinro   rW   r  3)ACr   )textwrapdedentr(   r   r8   rr   rs   r9   r:   r;   r3   rl  ro   r   r   r   r  rj   communicate
returncode)r>   rU   cexerA   rK   envs         rB   test_weird_environzTestProcess.test_weird_environ  s        DOO-d;##F*//*// $ 
 NN599%QUU||~~||  "c)))Ziik ))+CCc****1$$$ &&  s   D! !D76D7N)k__name__
__module____qualname____doc__rC   rL   rV   rZ   r^   r,   markskipifr   rk   ru   r   r~   r   r   r   r   r   r#   r   r   r   r   r   r   r   r2   r   r   r   r   r   r  r   r  r  r  r  r  r$  r'  r   r-  r/   r1   r   r0  r@  rH  r   r`  rg  rj  rm  rw  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,  r.  r1  r4  r@  rG  rK  rQ  r[  ra  rc  re  rt  ry  r   r  r   r  r#  rW   rB   r5   r5   O   s   )""	" [[E	+6# 7# "6 [['89. :.2/."(	' [[	*CD
L E
L [[	*CDN EN [[,,_E8 F8L$ [[E	,7	' 8	' [[00IU+' , J'R [[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	.," [[	*CD E6>< [[%56" 7".5 [[)	2FG[[	*CD[[)c'2FG7 H E H7` [[E	,7. 8. [[E	,7. 8.@D [[	*CD3 E31"&
D [[,,_E$( F$(L [[,,_E
$ F
$ [[,,_E= F=( [[O4[[)AB#. C 5#.L [[O4[[)AB6 C 568 [[E	,7$ 8$ U+[[6"D  N ,N';( [[	*CD1  E145)($32&h!!(($)L [[E	,7) 8) [[E	,7 8 [[E	,7	 8	,\,(\ [[K@ A6 [[K@[[E	,7[[M   [[A  %%	 8 A%%rW   r5   c                        e Zd ZdZ eed      r" ej                         Z ej                         Z	 fdZ
 fdZ fdZd Zej                  j!                  dd	      d
        Z xZS )LimitedUserTestCasezRepeat the previous tests by using a limited user.
        Executed only on UNIX and only if the user who run the test script
        is root.
        r  c           	      
    t               j                  |i | t        |       D cg c]  }|j                  d      s| c}D ]4  }t	        | |      fd}t        | |t        j                  ||              6 y c c}w )Ntestc                 H    	          y # t         j                  $ r Y y w xY wr7   )r9   rj   )r>   meths    rB   test_z+LimitedUserTestCase.__init__.<locals>.test_d  s%    !.. s    !!)r   __init__r  r  r   setattrtypes
MethodType)r>   r?   r@   r   attrr  r  	__class__s         @rB   r  zLimitedUserTestCase.__init__]  st    EGd-f- %(IFIqf1EIFtT* dE$4$4UD$AB GFs   B B c                     t               j                          t        j                  d       t        j                  d       y )Ni  )r   setUprF   setegidseteuidr>   r  s    rB   r  zLimitedUserTestCase.setUpl  s&    GMMOJJtJJtrW   c                     t        j                  | j                         t        j                  | j                         t               j                          y r7   )rF   r  PROCESS_UIDr  PROCESS_GIDr   tearDownr  s    rB   r  zLimitedUserTestCase.tearDownq  s5    JJt''(JJt''(GrW   c                     	 t        j                         j                  d       | j                  d      # t         j                  $ r Y y w xY w)Nr   zexception not raised)r9   r:   r  r   rj   r3  s    rB   r  zLimitedUserTestCase.test_nicev  sH    8 %%b) ii 677 && s   #6 AATzcauses problem as rootr_   c                      y r7   r#  r3  s    rB   ra  z'LimitedUserTestCase.test_zombie_process~  s    rW   )r  r  r  r  r  rF   r  r  r  r  r  r  r  r  r,   r  r  ra  __classcell__)r  s   @rB   r  r  R  sm    	 2x #"))+K#"))+K	C	
	
	8 
		D)A		B	 
C	rW   r  c                   2    e Zd ZdZed        Zd Zd Zd Zy)	TestPopenzTests for psutil.Popen class.c                     t                y r7   r-   )clss    rB   tearDownClasszTestPopen.tearDownClass  s    rW   c                 X   t         ddg}t        j                  |t        j                  t        j                  t
              5 }|j                          |j                          |j                   t        |      sJ t        j                  t              5  |j                   d d d        |j                          d d d        t        r&j!                  d      t"        j$                   k(  sJ y j!                  d      t"        j$                  k(  sJ y # 1 sw Y   rxY w# 1 sw Y   fxY w)Nrm   3import time; [time.sleep(0.1) for x in range(100)];stdoutro   r  rq   )r!   r9   Popenrr   rs   r"   r   r   r  r  r,   rH   rI   r8  rY   r   rO   rP   rQ   r>   rt   procs      rB   	test_misczTestPopen.test_misc  s    
 A

 \\????	

 IIKNNJJt99~. /NN
 99Q<FNN?22299Q<6>>111 /.
 
s%   AD D#D D	D  D)c                    t        j                  t        dgt        j                  t        j                  t        j                  t
              5 }|j                          d d d        j                  j                  sJ |j                  j                  sJ |j                  j                  sJ |j                  dk(  sJ y # 1 sw Y   cxY w)Nz-V)r  ro   r  r  r   )r9   r  r!   rr   rs   r"   r  r  closedro   r  r  )r>   r  s     rB   test_ctx_managerzTestPopen.test_ctx_manager  s    \\????//
 
 {{!!!!{{!!!!zz    !###
 
s   CCc                 ,   t         ddg}t        j                  |t        j                  t        j                  t
              5 }|j                          |j                          t        j                  t        j                        5  |j                          d d d        t        j                  t        j                        5  |j                          d d d        t        j                  t        j                        5  |j                  t        j                         d d d        t        rt        j                  t        j                        5  |j                  t        j                          d d d        t        j                  t        j                        5  |j                  t        j"                         d d d        d d d        y # 1 sw Y   6xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   DxY w# 1 sw Y   y xY w)Nrm   r  r  )r!   r9   r  rr   rs   r"   rY   rO   r,   rH   r<   rN   r\   rP   rQ   r   CTRL_C_EVENTCTRL_BREAK_EVENTr  s      rB   test_kill_terminatezTestPopen.test_kill_terminate  sM   
 A

 \\????	

 NNIIKv334  5v334		 5v334  0 5]]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
? G&1H
 G20+H
 G>;H
G	H
G#	H
&G/	+H
2G;	7H
>H	H

HN)	r  r  r  r  classmethodr  r  r  r  r#  rW   rB   r  r    s&    ' 26$>rW   r  )Fr  r%  rg   r  r  rF   rP   r  rV  r  rr   rr  r  r   r  r9   r   r   r   r   r   r	   r
   r   r   psutil._commonr   psutil._compatr   r   r   r   r   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/   r0   r1   r2   r3   r5   r  r  r  r#  rW   rB   <module>r     s   &     	      
              $  ,  *   ! # ' ' ) $ # ( ) - # $ %  # ' " ' # # , % &  *  & )  . 0 %y%. y%B0 	YRYY[A.k .lK> K>rW   