
    Xh                        d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlmZ ddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddlm&Z& ddlm'Z' ddlm(Z( ddlm)Z) ddlm*Z* ddlm+Z+ ddlm,Z, ddlm-Z- ddlm.Z. ddlm/Z/ ddlm0Z0 dd lm1Z1 dd!lm2Z2 dd"lm3Z3 dd#lm4Z4 dd$lm5Z5 dd%lm6Z6 dd&lm7Z7 dd'lm8Z8 dd(lm9Z9 dd)lm:Z: dd*lm;Z;  G d+ d,e.      Z< G d- d.e.      Z=y)/Tests for psutil.Process class.    N)mock)AIX)BSD)LINUX)MACOS)NETBSD)OPENBSD)OSX)POSIX)WINDOWS)	open_text)
CI_TESTING)GITHUB_ACTIONS)GLOBAL_TIMEOUT)HAS_CPU_AFFINITY)HAS_ENVIRON)
HAS_IONICE)HAS_MEMORY_MAPS)HAS_PROC_CPU_NUM)HAS_PROC_IO_COUNTERS)
HAS_RLIMIT)HAS_THREADS)MACOS_11PLUS)PYPY)
PYTHON_EXE)PYTHON_EXE_ENV)PsutilTestCase)
ThreadTask)
call_until)copyload_shared_lib)create_c_exe)create_py_exe)process_namespace)pytestreap_children)retry_on_failure)sh)skip_on_access_denied)skip_on_not_implemented)wait_for_pidc                   &   e Zd ZdZd Zd Zd Zd Zd Ze	j                  j                  e d      d	        Zd
 Ze	j                  j                  ed      d        Zd Zd Zd Zd Zd Zd Zd Ze	j                  j                  e d      d        Zd Ze	j                  j                  e d      d        Ze	j                  j                  e d       ee      d               Ze	j                  j                  e  d      e	j                  j                  e d      d               Z!e	j                  j                  e  d      e	j                  j                  e" d      d               Z#e	j                  j                  e$ d      d        Z%e	j                  j                  e$ d      d         Z&e	j                  j                  e$ d      d!        Z'e	j                  j                  e$ d      d"        Z(e	j                  j                  e$ d      d#        Z)d$ Z*e	j                  j                  e" d%      d&        Z+e	j                  j                  e, d      d'        Z- e.        e/e0      e	j                  j                  e, d      d(                      Z1 e.       d)        Z2d* Z3e	j                  j                  e4 d      d+        Z5e	j                  j                  e4 d      d,        Z6d- Z7d. Z8d/ Z9d0 Z:e	j                  j                  e;d1      d2        Z<d3 Z=e	j                  j                  e;d4      d5        Z>e	j                  j                  e d      d6        Z?e	j                  j                  e d      d7        Z@d8 ZAd9 ZBd: ZCd; ZDd< ZEe	j                  j                  eF d      d=        ZGe	j                  j                  eF d      d>        ZHe	j                  j                  eF d      d?        ZIe	j                  j                  eJd@      dA        ZKe	j                  j                  eJd@      dB        ZLe	j                  j                  e d      dC        ZM ee      e	j                  j                  eNxs edD      dE               ZOdF ZPdG ZQdH ZR e.       dI        ZSdJ ZTdK ZUdL ZVdM ZWdN ZXdO ZYdP ZZdQ Z[dR Z\dS Z]dT Z^e	j                  j                  e d      dU        Z_e	j                  j                  e d      dV        Z`e	j                  j                  e d      dW        ZadX ZbdY Zce	j                  j                  ed d      dZ        Zee	j                  j                  ed d      e	j                  j                  e d      e	j                  j                  efd[      e	j                  j                  ed\      d]                             Zgy^)_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       e/var/www/html/cjf29f/d23bf782/d32178f2/venv/lib/python3.12/site-packages/psutil/tests/test_process.pyspawn_psproczTestProcess.spawn_psprocL   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!   )r2   r3   r4   osgetpidr%   raisesAttributeErrorr7   ps     r;   test_pidzTestProcess.test_pidV   sN    NNuu		###]]>* 	AE	 	 	s   A""A+c                     | j                         }|j                          |j                         }t        r|t        j
                  k(  sJ |t        j                   k(  sJ | j                  |       y r0   )r<   killwaitr   signalSIGTERMSIGKILLassertProcessGoner7   rD   codes      r;   	test_killzTestProcess.test_kill\   s[    	vvx6>>)))FNN?***q!    c                     | j                         }|j                          |j                         }t        r|t        j
                  k(  sJ |t        j
                   k(  sJ | j                  |       y r0   )r<   	terminaterH   r   rI   rJ   rL   rM   s      r;   test_terminatezTestProcess.test_terminatef   s[    	vvx6>>)))FNN?***q!rP   c                     t         rt        j                  nt        j                  }| j	                         }|j                  |       |j                         }t        r||k(  s
J || k(  sJ | j                  |       y r0   )	r   rI   rK   rJ   r<   send_signalrH   r   rL   )r7   sigrD   rN   s       r;   test_send_signalzTestProcess.test_send_signalp   sc     %fnn6>>	cvvx3;;C4<<q!rP   z	not POSIX)reasonc                 H   t         j                  }| j                         }t        j                  dt
              5  t        j                  t        j                        5  |j                  |       d d d        d d d        | j                         }t        j                  dt              5  t        j                  t        j                        5  |j                  |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   *xY w# 1 sw Y   y xY w)Nzpsutil.os.killside_effect)rI   rJ   r<   r   patchProcessLookupErrorr%   rA   r2   r5   rU   PermissionErrorAccessDenied)r7   rV   rD   s      r;   test_send_signal_mockedz#TestProcess.test_send_signal_mocked{   s    nnZZ(6HI 	#v334 #c"#	# ZZ(oF 	#v223 #c"#	# 	#	# #	# 	## #	# 	#sG   $D  C42D -$DD#D4C=	9D  D	D	DD!c                 4   t         ddg}| j                  |      }|j                         }|dk(  sJ | j                  |       t         ddg}| j                  |t        j
                        }|j                         }|dk(  sJ | j                  |       t         ddg}| j                  |      }|j                         }|dk(  sJ | j                  |       t         dd	g}| j                  |      }|j                         }|dk(  sJ | j                  |       y )
N-cpassr   z1 / 0)stderr   zimport sys; sys.exit(5);   zimport os; os._exit(5);)r   r<   rH   rL   
subprocessPIPE)r7   cmdrD   rN   s       r;   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!rP   zfails on NETBSDc                    | j                         }t        r"|j                  t        j                         t        j                  t        j                        5  |j                  d       d d d        |j                  t        j                         t        j                  t        j                        5  |j                  d       d d d        |j                  t        j                         |j                         t        j                   k(  sJ |j                         t        j                   k(  sJ y |j                          t        j                  t        j                        5  |j                  d       d d d        |j                          t        j                  t        j                        5  |j                  d       d d d        |j                          |j                         t        j                  k(  sJ |j                         t        j                  k(  sJ y # 1 sw Y   xY w# 1 sw Y   rxY w# 1 sw Y   xY w# 1 sw Y   xY w)NMbP?)timeout)r<   r   rU   rI   SIGSTOPr%   rA   r2   TimeoutExpiredrH   SIGCONTrJ   suspendresumerR   rC   s     r;   test_wait_stoppedzTestProcess.test_wait_stopped   s    MM&..)v445 &u%&MM&..)v445 &u%&MM&..)668...668...IIKv445 &u%&HHJv445 &u%&KKM668v~~---668v~~---#& && && && &s0   H-7H:-I;I-H7:IIIc                 d   | j                         \  }}t        j                  t        j                        5  |j                  d       d d d        t        j                  t        j                        5  |j                  d       d d d        |j                          |j                          |j                         }|j                         }t        r|t        j                   k(  sJ |J y |t        j                  k(  sJ |t        j                  k(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w)N{Gz?)
spawn_children_pairr%   rA   r2   ro   rH   rR   r   rI   rJ   )r7   child
grandchild	child_retgrandchild_rets        r;   test_wait_non_childrenz"TestProcess.test_wait_non_children   s     !446z]]6001 	JJt	]]6001 	"OOD!	" 	JJL	#*/// ")))......#	 		" 	"s   D4D&D#&D/c                    | j                         }|j                          t        j                  t        j
                        5  |j                  d       d d d        t        j                  t        j
                        5  |j                  d       d d d        t        j                  t              5  |j                  d       d d d        y # 1 sw Y   zxY w# 1 sw Y   IxY w# 1 sw Y   y xY w)Nru   r   )r<   namer%   rA   r2   ro   rH   
ValueErrorrC   s     r;   test_wait_timeoutzTestProcess.test_wait_timeout   s    	]]6001 	FF4L	]]6001 	FF1I	]]:& 	FF2J	 			 		 		 	s$   CC4C'CC$'C0c                 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   rm   )r<   r%   rA   r2   ro   rH   rG   timer   failr   rI   rK   rJ   rL   )r7   rD   stop_atrN   s       r;   test_wait_timeout_nonblockingz)TestProcess.test_wait_timeout_nonblocking   s    ]]6001 	FF1I		))+.iikG#vvay ))I&&FNN?***6>>)))q!!	 	 (( 	 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)Nrl   )intervald           r}   )	r2   r3   cpu_percentrange
isinstancefloatr%   rA   r   )r7   rD   _percents       r;   test_cpu_percentzTestProcess.test_cpu_percent   s    NN	u%	u%s 	"AmmTm2Ggu---c>!>	" ]]:& 	'MM2M&	' 	' 	's   B))B2c                     t        j                  dd       5 }t        j                         j	                          |j
                  sJ 	 d d d        y # 1 sw Y   y xY w)Nzpsutil.cpu_count)return_value)r   r\   r2   r3   r   called)r7   ms     r;   test_cpu_percent_numcpus_nonez)TestProcess.test_cpu_percent_numcpus_none   sF    ZZ*> 	!NN((*88O8	 	 	s   1AAc           
         t        j                         j                         }|j                  dk\  sJ |       |j                  dk\  sJ |       |j
                  dk\  sJ |       |j                  dk\  sJ |       t        r|j                  dk\  sJ |       |j                  D ]5  }t        j                  dt        j                  t        ||                   7 y )Nr   z%H:%M:%S)r2   r3   	cpu_timesusersystemchildren_userchildren_systemr   iowait_fieldsr   strftime	localtimegetattr)r7   timesr~   s      r;   test_cpu_timeszTestProcess.test_cpu_times  s     **,zzS '%' ||s")E)"""c)050)$$+2U2+<<3&--&MM 	LDMM*dnnWUD5I&JK	LrP   c                 $   d } |        t        j                         j                         }t        j                         }| j                  |j                  |j                  d       | j                  |j                  |j                  d       y )Nc                      t        j                         j                  dz   } t        j                         j                  | k  r8t        d      D ]  }|dz  }	 t        j                         j                  | k  r7y y )Ng?i    )r?   r   r   r   )r   xs     r;   	waste_cpuz/TestProcess.test_cpu_times_2.<locals>.waste_cpu  sX    hhjoo+G((*//G+v A!GA ((*//G+rP   皙?)delta)r2   r3   r   r?   r   assertAlmostEqualr   r   )r7   r   abs       r;   test_cpu_times_2zTestProcess.test_cpu_times_2  sh    	 	NN&&(HHJqvvqvvS9qxx=rP   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   re   )r2   r3   cpu_num	cpu_countr   )r7   rD   nums      r;   test_cpu_numzTestProcess.test_cpu_num  sb    NNiikaxx"!8O8yy{eF$4$4$67777rP   c                 4   | j                         }t        j                         }|j                         }t        ||z
        }|dkD  r| j	                  d| d| d|       t        j
                  dt        j                  |j                                      y )Nr   z
expected: z	, found: z, difference: z%Y %m %d %H:%M:%S)r<   r   create_timeabsr   r   r   )r7   rD   nowr   
differences        r;   test_create_timezTestProcess.test_create_time%  s    iikmmo
 s*+
>))SE;- 8<!  	)4>>!--/+JKrP   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)
r2   r3   terminalr?   pathrealpathr)   RuntimeErrorr%   skip)r7   r   r   s      r;   test_terminalzTestProcess.test_terminal7  sn    >>#,,.'gg&&r%y1
  3&     =kk";<<=s   (A A6)only_ifc                    t        j                         }|j                         }t        t        d      5 }|j                          d d d        |j                         }t        sxt        sr|j                  |j                  kD  sJ |j                  |j                  k(  sJ t        rl|j                  |j                  kD  sJ |j                  |j                  k(  s8J |j                  |j                  k\  sJ |j                  |j                  k\  sJ |j                         }t        | j                         d      5 }|j!                  t#        ddz  d             d d d        |j                         }|j                  |j                  k\  sJ |j                  |j                  k\  sJ |j                  |j                  k\  sJ |j                  |j                  k\  sJ t        r6|j                  |j                  kD  sJ |j                  |j                  k\  sJ t%        t'        |            D ]"  }t        r|dk\  r||   dk\  sJ ||   dk\  r"J  y # 1 sw Y   xY w# 1 sw Y   	xY w)Nrbwbr   i@B asciir   r   )r2   r3   io_countersopenr   readr   r   
read_countwrite_countr   
read_charswrite_chars
read_byteswrite_bytes
get_testfnwritebytesr   len)r7   rD   io1fio2is         r;   test_io_counterszTestProcess.test_io_countersC  s    NNmmo*d# 	qFFH	mmo3>>CNN222??coo555~~666#//999>>S^^333??coo555 mmo$//#T* 	3aGGE#-12	3mmo#//111#//111~~///~~///??S__444>>S^^333 s3x 	AqAvq6Q;;q6Q;;	7	 		3 	3s   I<I"I"I,z
linux onlyc                    fd}t        j                         t        s&j                         d   t         j                  k(  sJ t         j                  dk(  sJ t         j
                  dk(  sJ t         j                  dk(  sJ t         j                  dk(  sJ j                         }| j                  ||       j                  t         j                         t        j                               t         j                  dfk(  sJ t        j                  t              5  j                  t         j                  d       d d d        j                  t         j                         t        j                               t         j                  dfk(  sJ j                  t         j                  d       t        j                               t         j                  dfk(  sJ t        j                  t              5  j                  t         j                  d       d d d        	 j                  t         j
                  d       t        j                  t        d	
      5  j                  t         j                  d       d d d        t        j                  t        d	
      5  j                  t         j                  d       d d d        t        j                  t        d
      5  j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# t         j                  $ r Y w xY w# 1 sw Y   xY w# 1 sw Y   ~xY w# 1 sw Y   y xY w)Nc                 ^    | \  }}|t         j                  k(  rd}j                  ||       y Nr   )r2   IOPRIO_CLASS_NONEionice)initioclassvaluerD   s      r;   cleanupz.TestProcess.test_ionice_linux.<locals>.cleanupn  s-    !NGU&222HHWe$rP   r   re   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%   rA   r   r_   )r7   r   r   rD   s      @r;   test_ionice_linuxzTestProcess.test_ionice_linuxk  s   	% NN88:a=F$<$<<<<''1,,,%%***%%***''1,,,xxz& 	
))*QXXZ V%=%=q$AAAA]]:& 	8HHV--QH7	8 	
''(QXXZ V%;%;Q$????	''q1QXXZ V%;%;Q$????]]:& 	6HHV++1H5	6	HHV++1H5 ]]:-GH 	2HHV--q1	2]]:-GH 	2HHV--q1	2]]D
 	 HH1H	 	%	8 	8	6 	6 "" 			2 	2	2 	2	 	sN   #"L"L-!L& )!L?-!M1MLL#&L<;L<?MMM z!not supported on this win versionc                    t        j                         }t        s#|j                         t         j                  k(  sJ |j                         }| j                  |j                  |       |j                  t         j                         |j                         t         j                  k(  sJ |j                  t         j                         |j                         t         j                  k(  sJ 	 |j                  t         j                         |j                         t         j                  k(  sJ t        j                  t        d      5  |j                  t         j                  d       d d d        t        j                  t        d      5  |j                  t         j                  dz          d d d        y # t         j                  $ r Y w xY w# 1 sw Y   ixY w# 1 sw Y   y xY w)Nz&value argument not accepted on Windowsr   re   r   zis not a valid priority)r2   r3   r   r   IOPRIO_NORMALr   IOPRIO_VERYLOW
IOPRIO_LOWIOPRIO_HIGHr_   r%   rA   	TypeErrorr   )r7   rD   r   s      r;   test_ionice_winzTestProcess.test_ionice_win  sr   
 NN88:!5!5555xxz$' 	
&&'xxzV22222	""#xxzV.....	4HHV''( 88:!3!3333]]E
 	4 HHV))H3	4 ]]:-FG 	-HHV''!+,	- 	- "" 		
	4 	4	- 	-s*   /F= "G#G"=GGG"G+c                    dd l }t        j                  t        j                               }t        t              D cg c]  }|j                  d      s| }}|sJ |       |D ]  }t        t        |      }|dk\  sJ |t        |      v r>|t        ||      k(  sJ t        r?|j                  |      |j                  |      k(  rcJ |j                  |      }t        |      dk(  sJ |d   dk\  sJ |d   dk\  rJ  y c c}w )Nr   RLIMITr   r}   re   )resourcer2   r3   r?   r@   dir
startswithr   r   rlimit	getrlimitr   )r7   r   rD   r   namesr~   r   rets           r;   test_rlimit_getzTestProcess.test_rlimit_get  s    NN299;'KBq1<<+ABBeu 	$DFD)EA::s8}$$ 7777 xx(*<*<U*CCCChhuo3x1}$}1v|#|1v|#|	$ Cs   DDc                    | j                         }|j                  t        j                  d       |j                  t        j                        dk(  sJ t        rRt        j                  t        d      5  t        j                  j                  d      j                  d       d d d        t        j                  t              5  |j                  t        j                  d       d d d        y # 1 sw Y   LxY w# 1 sw Y   y xY w)N)rf   rf   zcan't use prlimitr   r   )rf   rf   rf   )
r<   r   r2   RLIMIT_NOFILEr   r%   rA   r   _psplatformr3   rC   s     r;   test_rlimit_setzTestProcess.test_rlimit_set  s    	%%v.xx,,-777 z1DE 8""**1-44Q78]]:& 	6HHV))95	6 	68 8	6 	6s   6/C0!C<0C9<Dc                 x   t        j                         }| j                         }|j                  t         j                        \  }}	 |j                  t         j                  d|f       t        |d      5 }|j                  d       d d d        t        j                  t              5 }t        |d      5 }|j                  d       d d d        d d d        j                  j                  t        j                  k(  sJ 	 |j                  t         j                  ||f       |j                  t         j                        ||fk(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# |j                  t         j                  ||f       |j                  t         j                        ||fk(  sJ w xY w)N   r   s   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXs  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)r2   r3   r   r   RLIMIT_FSIZEr   r   r%   rA   OSErrorr   errnoEFBIG)r7   rD   testfnsofthardr   excs          r;   test_rlimitzTestProcess.test_rlimit  s`   NN"XXf112
d	AHHV((4,7fd# %q$% w' )3&$' )1GGK()) 99??ekk111HHV((4,788F//0T4L@@@% %
) )) )
 HHV((4,788F//0T4L@@@sU   .E/ 6E!E/ )E#6EE#1E/ EE/ E 	E##E,(E/ /A
F9c                    t        j                         }|j                  t         j                        \  }}	 |j                  t         j                  d|f       |j                  t         j                  t         j                  |f       t        | j                         d      5 }|j                  d       d d d        |j                  t         j                  ||f       |j                  t         j                        ||fk(  sJ y # 1 sw Y   RxY w# |j                  t         j                  ||f       |j                  t         j                        ||fk(  sJ w xY w)Nr  r   s   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)r2   r3   r   r  RLIM_INFINITYr   r   r   )r7   rD   r
  r  r   s        r;   test_rlimit_infinityz TestProcess.test_rlimit_infinity  s    NNXXf112
d	AHHV((4,7HHV((6+?+?*FGdoo'. %!$% HHV((4,788F//0T4L@@@	% % HHV((4,788F//0T4L@@@s%   A,D $D6D DD A
Ec                     t        j                         }|j                  t         j                        \  }}|t         j                  k(  sJ |j                  t         j                  ||f       y r0   )r2   r3   r   r  r  )r7   rD   r
  r  s       r;   test_rlimit_infinity_valuez&TestProcess.test_rlimit_infinity_value  sT     NNXXf112
dv+++++	$$tTl3rP   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 accessre   )r2   r3   r
   num_threadsr_   r%   r   r   )r7   rD   step1step2s       r;   test_num_threadszTestProcess.test_num_threads	  s     NNJ MMOE\ 	&MMOEEAI%%%	& 	& && Jkk"HIIJ
	& 	&s   A, B,)BB!zWINDOWS onlyc                 V    t        j                         }|j                         dkD  sJ y r   )r2   r3   num_handlesrC   s     r;   test_num_handleszTestProcess.test_num_handles  s$     NN}}"""rP   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  re   r   r   )r2   r3   r
   threadsr_   r%   r   r   r   id	user_timesystem_time)r7   rD   r  r  athreads        r;   test_threadszTestProcess.test_threads   s    NNJ		 IIKE\ 	5IIKEu:Ua///AhG::+++$$
222&&'!*444	5 	5 && Jkk"HIIJ
	5 	5s   B? A.C+?)C(+C4c                    | j                         }t        r	 |j                          t        |j                         j                  t        d |j                         D              z
        dk  sJ t        |j                         j                  t        d |j                         D              z
        dk  sJ y # t        j                  $ r t        j                  d      w xY w)Nr  c              3   4   K   | ]  }|j                     y wr0   )r  .0r   s     r;   	<genexpr>z-TestProcess.test_threads_2.<locals>.<genexpr>?  s     (J(J   r   c              3   4   K   | ]  }|j                     y wr0   )r   r%  s     r;   r'  z-TestProcess.test_threads_2.<locals>.<genexpr>C  s     *NQ1==*Nr(  )r<   r
   r  r2   r_   r%   r   r   r   r   sumr   rC   s     r;   test_threads_2zTestProcess.test_threads_24  s     J		 ""S(Jaiik(J%JJK	
 $$s*N!))+*N'NNO	
 && Jkk"HIIJs   B; ;)C$c                    t        j                         }|j                         d d \  }}|j                         }|dkD  sJ |dkD  sJ d gdz  }|j                         d d \  }}|j                         }||kD  sJ ||k\  sJ ||kD  sJ ~t        rF|j                         }	|	j
                  |	j                  k(  sJ |	j                  |	j                  k(  sJ |j                         }	|	j                  D ]  }
t        |	|
      dk\  rJ  y )Nr   r   i` )r2   r3   memory_infomemory_percentr   rsswsetvmspagefiler   r   )r7   rD   rss1vms1percent1memarrrss2vms2percent2memr~   s              r;   test_memory_infozTestProcess.test_memory_infoG  s   NN ]]_Ra(
d##%axxaxx '!]]_Ra(
d##% d{{t||("""--/C77chh&&&77cll***mmoKK 	+D3%***	+rP   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   r1  )r2   r3   virtual_memorytotalmemory_full_infor   r   r   r   r   r   usspssswap)r7   rD   r>  r:  r~   r   s         r;   test_memory_full_infoz!TestProcess.test_memory_full_infof  s    NN%%'--  "KK 	"DC&EA::#%E>!>	" Gu77a<<77a<<88q= = rP   c                    t        j                         }|j                         }t        |      t        t	        |            k(  sJ |j                  d      }|D ]W  }|j
                  j                  d      r t        r|j
                  dk(  r6t        j
                  j                  |j
                        sJ |j
                         t        re	 t        j
                  j                  |j
                        s:t        j
                  j                  |j
                        sJ |j
                         dt        j
                  j#                  |j
                        vs	 t        j$                  |j
                        }t%        j&                  |j(                        rIJ |j
                          |D ]Q  }|j,                  D ]@  }t/        ||      }	|dk(  r|d	v r
|	rJ |	       t1        |	t2              sJ |	d
k\  r;J |	        S y # t        $ rN t        s t        d      5 }|j!                         }d d d        n# 1 sw Y   nxY w|j
                   dvr Y w xY w# t*        $ r Y w xY w)NF)grouped[pvclockz/proc/self/smapsz
 (deleted)64r   >   addrpermsr   )r2   r3   memory_mapsr   setr   r   r   r?   isabsr   existsislinkAssertionErrorr   r   r   basenamestatS_ISREGst_modeFileNotFoundErrorr   r   r   int)
r7   rD   mapsext_mapsntr   datastfnamer   s
             r;   test_memory_mapszTestProcess.test_memory_mapsv  s   NN}}4yCD	N***===/ 	=Bww!!#&rww)+77==)22772)77>>"''2bggnn7 ww  RWW--bgg66=)B  <<

3<RWW<3;	=>  		-B -E*F?-- '%'5%eS111 A:,u,:-		-' &  "#56 (! vvx( ( (''*-T9 : ) s=   A#H$I'I$(I9	I$II$#I$'	I43I4c                     t        j                         }t               5 }d }|j                         D cg c]  } ||j                         }} ||      |v sJ 	 d d d        y c c}w # 1 sw Y   y xY w)Nc                 z    t         j                  j                  t         j                  j                  |             S r0   )r?   r   r   normcaserD   s    r;   normpathz8TestProcess.test_memory_maps_lists_lib.<locals>.normpath  s&    ww''(8(8(;<<rP   )r2   r3   r!   rK  r   )r7   rD   r   rb  r   libpathss         r;   test_memory_maps_lists_libz&TestProcess.test_memory_maps_lists_lib  ss     NN " 	.d= 34--/BQ(BHBD>X---	. 	.
 C	. 	.s   A+A&A+&A++A4c                    t        j                         }|j                          t        j                  t
              5  |j                  d       d d d        t        st        st        r|j                  d       y y # 1 sw Y   /xY w)Nz?!?)memtyper@  )	r2   r3   r.  r%   rA   r   r   r   r   rC   s     r;   test_memory_percentzTestProcess.test_memory_percent  si    NN	]]:& 	,U+	,EWU+ %	, 	,s   A??Bc                     | j                         }|j                         sJ |j                         sJ |j                          |j                          |j                         rJ |j                         rJ y r0   )r<   
is_runningrG   rH   rC   s     r;   test_is_runningzTestProcess.test_is_running  s^    ||~~||~~		<<>!!<<>!!>rP   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   .re    rb   zimport os; print('hey')hey)r<   exer   rP  r   r   r?   r   r`  sysversion_inforeplacer)   )r7   rD   ro  r`  verouts         r;   test_exezTestProcess.test_exe  s    eeg	*$$$( #t678e||)  	3s8s:677++}(<<<< ))!,-Qs/?/?/B.CD;;sB/:3E3Ec23NNNN% 	s6   A BD	+C54D5	D>D DDDc                    t         ddg}| j                  |      }t        r(|j                         g k(  rt	        j
                  d      t        st        st        r|j                         d   t         k(  sJ y t        r\t        rV|j                         d   }|t         k7  r:dj                  |j                         dd        dj                  |dd        k(  sJ y dj                  |j                               dj                  |      k(  sJ y )Nrb   2import time; [time.sleep(0.1) for x in range(100)]OPENBSD: returned EBUSYr    re   )r   r<   r	   cmdliner%   r   r
   r   r   r   join)r7   rz  rD   pyexes       r;   test_cmdlinezTestProcess.test_cmdline  s    @

 g&aiikR'++788 W99;q>Z///		AJ&88AIIKO48MMMM88AIIK(CHHW,====rP   zbroken on PYPYc                    t         g}|j                  dgdz         |j                  ddg       | j                  |      }t        r	 |j	                         |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   rb   rw  z#OPENBSD: process turned into zombierx  )
r   extendr<   r
   rz  r2   ZombieProcessr%   r   r	   )r7   rz  rD   r   s       r;   test_long_cmdlinezTestProcess.test_long_cmdline  s    ,v{#GH	
 g&Iyy{g--- ))+C#)kk";<<'>!> '' Ikk"GHHIs   B )B?c                 D   | j                         }|j                         j                         }t        j                  j                  t        j                  j                  t        j                              j                         }|j                  |      s	J ||f       y r0   )
r<   r~   lowerr?   r   rQ  r   rp  
executabler   )r7   rD   r~   r|  s       r;   	test_namezTestProcess.test_name  so    vvx~~  !1!1#..!ABHHJ%4t}4%rP   zunreliable on PYPYc                 >   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   )suffixrb   rw  )r#   r   stringdigitsr<   r
   r~   r?   r   rQ  rP  statusr2   STATUS_ZOMBIEr   )r7   r|  rz  rD   s       r;   test_long_namezTestProcess.test_long_name  s    dooV]]Q5FoGH@

 g&vvx277#3#3E#:::: 668rww//6666 " 88:!5!5577++E2==affhGGG Hs   
2B0 0A)DDc                 (   t        j                         }|j                         \  }}}|t        j                         k(  sJ |t        j
                         k(  sJ t        t        d      r(t        j                         |j                         k(  sJ y y N	getresuid)r2   r3   uidsr?   getuidgeteuidhasattrr  r7   rD   real	effective_saveds        r;   	test_uidszTestProcess.test_uidsD  s    NN"#&&(iryy{"""BJJL((( 2{#<<>QVVX--- $rP   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  )r2   r3   gidsr?   getgidgetegidr  	getresgidr  s        r;   	test_gidszTestProcess.test_gidsQ  r  rP   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r0   )nicer2   r_   )r   rD   s    r;   r   z&TestProcess.test_nice.<locals>.cleanup_  s+    t&& s    ++str)priogetpriorityre   r   )r2   r3   r%   rA   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  r?   r  PRIO_PROCESSr@   r   )r7   r   r   highest_prior  new_priorD   s         @r;   	test_nicezTestProcess.test_nice^  s>   	 NN]]9% 	FF5M	vvx&L**22,,22**.. 4 \\t\, 44t $%668
  ">>"66"::$ 
  (4/<3G/3'/<'? ?'?#+t#33#3)4 44<2}-r		D668$$ q	vvx1}$}2}-r		D668$$
 FF1I668q=(= i	 	$ ".. 4 4P && sO   I&)J+I3<AJ DJ &I03J
J	J

JJ	J0/J0c                 r    t        j                         }|j                         t         j                  k(  sJ y r0   )r2   r3   r  STATUS_RUNNINGrC   s     r;   test_statuszTestProcess.test_status  s(    NNxxzV22222rP   c                    | j                         }|j                         }t        r|j                  d      \  }}t	        j
                         }|j                  d      rt        j                  d      ||k(  sJ dt        j                  v r|t        j                  d   k(  sJ y y |t	        j
                         k(  sJ y )N\$zrunning as service account
USERDOMAIN)r<   usernamer   splitgetpassgetuserendswithr%   r   r?   environ)r7   rD   r  domaingetpass_users        r;   test_usernamezTestProcess.test_username  s    ::<'~~d3FH"??,L$$S) kk">??|+++rzz)L!9999 * w0000rP   c                 r    | j                         }|j                         t        j                         k(  sJ y r0   )r<   cwdr?   getcwdrC   s     r;   test_cwdzTestProcess.test_cwd  s*    uuw"))+%%%rP   c                 V    t         ddg}| j                  |      t        fd       y )Nrb   zFimport os, time; os.chdir('..'); [time.sleep(0.1) for x in range(100)]c                       j                         t        j                  j                  t        j                               k(  S r0   )r  r?   r   dirnamer  ra  s   r;   <lambda>z(TestProcess.test_cwd_2.<locals>.<lambda>  s%    1557bggoobiik&BB rP   )r   r<   r    )r7   ri   rD   s     @r;   
test_cwd_2zTestProcess.test_cwd_2  s0    	
 c"BCrP   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   re   )r2   r3   cpu_affinityr   r  r?   listr  r4   r   rL  r   r   r  r   _proc_get_eligible_cpusr%   rA   r   r   )r7   rD   initialall_cpusns        r;   test_cpu_affinityzTestProcess.test_cpu_affinity  s   NN.."w02*+d2#7#7#>????7|s3w<0000c&"4"4D"ABCD 	:ANNA3>>#s***r./~~'40D0DQUU0K+LLLLq)$~~'*aiik999	: 	
r>>#qww'A'A'CCCC>>#x///2*+>>#tB,@,@,G'HHHH]]9% 	NN1		w	s8}%	uX'	 	s   J$$J-c                    | j                         }t        t        j                  d            dz   g}t	        j
                  t              5  |j                  |       d d d        t	        j
                  t              5  |j                  t        dd             d d d        t	        j
                  t        t        f      5  |j                  ddg       d d d        t	        j
                  t              5  |j                  ddg       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   WxY w# 1 sw Y   y xY w)	NTr  
   i'  i*  r   1r}   )
r<   r   r2   r   r%   rA   r   r  r   r   )r7   rD   invalid_cpus      r;   test_cpu_affinity_errsz"TestProcess.test_cpu_affinity_errs  s    6++489B>?]]:& 	(NN;'	(]]:& 	0NN5./	0]]Iz23 	%NNAs8$	%]]:& 	$NNAr7#	$ 	$	( 	(	0 	0	% 	%	$ 	$s0   D D!D-8D9D!D*-D69Ec                    t        j                         }|j                         }|sJ |       | j                  |j                  |       t	        |      dkD  r|d d }g }t        t	        |      dz         D ].  }|j                  d t        j                  ||      D               0 |D ]:  }|j                  |       t        |j                               t        |      k(  r:J  y )N   re   c              3   6   K   | ]  }|rt        |        y wr0   )r  )r&  subsets     r;   r'  zATestProcess.test_cpu_affinity_all_combinations.<locals>.<genexpr>  s       Vs   )
r2   r3   r  r   r   r   r  	itertoolscombinationssorted)r7   rD   r  combosr   combos         r;   "test_cpu_affinity_all_combinationsz.TestProcess.test_cpu_affinity_all_combinations  s    NN.."w0 w<"crlGs7|a'( 	AMM '44Wa@ 	  	=ENN5!!..*+ve}<<<	=rP   zbroken on BSDc                    t        j                         | j                         }j                         |vsJ t	        |d      5 }|j                  d       |j                          t        fd       j                         D cg c]+  }t        j                  j                  |j                        - }}t        j                  j                  |      |v sJ t        r(D ]#  }|j                  |k(  s|j                  dk(  r#J  d d d        D ]2  }t        j                  j                  |j                        r-J |        d| d}| j                  t        d|g      t!        d      D ]a  }j                         D cg c]+  }t        j                  j                  |j                        - }}||v r n:t#        j$                  d	       c t        j                  j                  |      v sJ |D ](  }t        j                  j                  |      r#J |        y c c}w # 1 sw Y   $xY wc c}w )
Nr   s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc                  N    t        j                               t               k7  S r0   )r   
open_files)filesrD   s   r;   r  z-TestProcess.test_open_files.<locals>.<lambda>  s    s1<<>2c%j@ rP   r  zimport time; f = open(r'z/', 'r'); [time.sleep(0.1) for x in range(100)];rb   r   ru   )r2   r3   r   r  r   r   flushr    r?   r   r`  r   positionisfiler<   r   r   r   sleep)	r7   r	  r   r   	filenamesfilerz  r  rD   s	          @@r;   test_open_fileszTestProcess.test_open_files  s   NN"U"""&$ 	51GGK GGI@ALLNE;@Aa))!&&1AIA77##F+y888! 5DyyF*#}}4445	5  	3D77>>$)),2d2,	3
 'vh /  	 z49:s 	9A;<<<>Ja))!&&1JIJ"JJt		9 77##F+y888 	.D77>>$'--'	./ B	5 	5. Ks1   	AH30H.>?H3>H3H30I .H33H=c                 &   t        j                         }t        j                  j                  }| j                         }t        |d      5 }|j                         D ]F  } ||j                         ||j                        k(  s|j                  |j                         k(  sF n# | j                  d|j                                ||j                         ||j                        k(  sJ t        r|j                  dk(  s!J |j                  |j                         k(  sJ |j                         d   }|d   |j                  k(  sJ |d   |j                  k(  sJ |j                  |j                         vsJ 	 d d d        y # 1 sw Y   y xY w)Nwzno file found; files=r}   r   re   )r2   r3   r?   r   r`  r   r   r  r~   fdfilenor   r   )r7   rD   r`  r	  fileobjr  ntuples          r;   test_open_files_2zTestProcess.test_open_files_27  sS    NN77##"&# 	6' LTYY'8GLL+AAww'.."22L ii"77I JKKDII&(7<<*@@@@ww"}$}ww'.."2222\\^A&F!9+++!9		)))<<q||~555'	6 	6 	6s   AF"CFFc                    t        j                         }| j                         }|j                         }t	        |d      }| 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  re   r   )r2   r3   r   num_fdsr   r   closesocket)r7   rD   r	  startr  socks         r;   test_num_fdszTestProcess.test_num_fdsR  s    NN"		FC 

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

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



yy{e###rP   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)r2   r3   r*  num_ctx_switchesr   r   r  r   )r7   rD   beforer   afters        r;   test_num_ctx_switchesz!TestProcess.test_num_ctx_switchesa  sq    
 NNQ'')*q 	AJJt**,-Ev~		
 iiLMMrP   c                    t        j                         }t        t        d      r'|j	                         t        j
                         k(  sJ | j                         }|j	                         t        j                         k(  sJ y )Ngetppid)r2   r3   r  r?   ppidr  r<   r@   rC   s     r;   	test_ppidzTestProcess.test_ppido  sZ    NN2y!668rzz|+++vvx299;&&&rP   c                     | j                         }|j                         j                  t        j                         k(  sJ t        j                         d   }t        j                  |      j                         J y r   )r<   parentr4   r?   r@   r2   pidsr3   )r7   rD   
lowest_pids      r;   test_parentzTestProcess.test_parentv  s\    xxz~~,,,[[]1%
~~j)002:::rP   c                     t        j                         }| j                         \  }}|j                         |k(  sJ |j                         |k(  sJ y r0   )r2   r3   rv   r
  r7   r
  rw   rx   s       r;   test_parent_multizTestProcess.test_parent_multi}  sL    ! 446z  "e+++||~'''rP   c                    t        j                         }|j                         sJ | j                         \  }}|j                         d   |k(  sJ |j                         d   |k(  sJ |j                         d   |k(  sJ y r   )r2   r3   parentsrv   r  s       r;   test_parentszTestProcess.test_parents  s    !~~ 446z}}q!V+++!!#A&%///!!#A&&000rP   c                    t        j                         }|j                         rJ |j                  d      rJ | j                  d      }|j                         }|j                  d      }||fD ]R  }t	        |      dk(  sJ |d   j
                  |j
                  k(  sJ |d   j                         |j
                  k(  rRJ  y )NT	recursiver   )creationflagsre   )r2   r3   childrenr<   r   r4   r  )r7   r
  rw   	children1	children2r  s         r;   test_childrenzTestProcess.test_children  s    !??$$$??T?222 !!!2OO%	OOdO3	"I. 	4Hx=A%%%A;??eii///A;##%333	4rP   c                    t        j                         }| j                         \  }}|j                         |gk(  sJ |j                  d      ||gk(  sJ |j	                          |j                          |j                  d      rJ y )NTr  )r2   r3   rv   r  rR   rH   r  s       r;   test_children_recursivez#TestProcess.test_children_recursive  s     ! 446z UG+++.5*2EEEE 	

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

T
*A q6SQ[((( <<  "" 		s#   C$C2 C/.C/2DDc                    t        j                         }| j                         \  }}|j                  d      }t	        |      dk(  sJ |d   |k(  sJ |d   |k(  sJ |j                         }|d   |k(  sJ |d   |k(  sJ y )NTr  r   r   re   )r2   r3   rv   r  r   r  )r7   r
  rw   rx   r  r  s         r;   test_parents_and_childrenz%TestProcess.test_parents_and_children  s    ! 446z??T?28}!!!{e###{j((($$&qzU"""qzV###rP   c                 :   | j                         }|j                          t        d      D ]:  }|j                         t        j
                  k(  r nt        j                  d       < |j                          |j                         t        j
                  k7  sJ y )Nr   ru   )	r<   rq   r   r  r2   STATUS_STOPPEDr   r  rr   )r7   rD   r   s      r;   test_suspend_resumezTestProcess.test_suspend_resume  st    			s 	AxxzV222JJt	 	

xxzV22222rP   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%   rA   r   r2   r3   r   )r7   s    r;   test_invalid_pidzTestProcess.test_invalid_pid  sa    ]]9% 	 NN3	 ]]:& 	NN2	 		  	 	 	s   A0A<0A9<Bc                    t        j                         }|j                  ddg      }t        |j	                               ddgk(  sJ t        j                  t        t        j                                     }|j                  dgd      }t        |d   t              s
|d   dk(  sJ t        j                  ddt         j                  	      5  |j                  d
gd      d
dik(  sJ 	 d d d        t        j                  ddt        j                  |j                  d      	      5  t        j                  t         j                        5  |j                  d
g       d d d        d d d        t        j                  ddt        j                   |j                  d      	      5  |j                  d
gd      d
dik(  sJ 	 d d d        t        j                  ddt"        	      5  |j                         }d
t        |j	                               vsJ t        j                  t"              5  |j                  d
g       d d d        d d d        t        j                  t$              5  |j                  d       d d d        t        j                  t&              5  |j                  dg       d d d        t        j                  t&              5  |j                  ddg       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   UxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nro  r~   )attrsnet_connectionsfoo)r3  ad_valuezpsutil.Process.niceT)creater[   r  re   bar)r2   r3   as_dictr  keysminr  r   r  r   r\   r_   r5   r4   r%   rA   r  NotImplementedErrorr   r   )r7   rD   ds      r;   test_as_dictzTestProcess.test_as_dict  s   NNIIUFOI,affhE6?222NN3v{{}-.II./%I@!-.5&'5000 ZZ!$F<O<O
 	H 99F8a98VQKGGG	H ZZ!,,QUUF;
 	*
 v334 *			)*	* ZZ!,,QUUF;
 	P
 99F8e9<OOO	P ZZ!$<O
 	* 		Aaffh///23 *			)*	* ]]9% 	IIf	]]:& 	IIug	]]:& 	&IIuen%	& 	&M	H 	H* *	* 	*	P 	P* *	* 	*	 		 		& 	&s   K2+$LK?#L)L*AL21L&L2.L>!M
M2K<?L		LLL#&L/	+L22L;>M
MMc                    t        j                         }t        j                  d      5 }|j	                         5  |j                          |j                          d d d        |j                  dk(  sJ 	 d d d        t        j                  d      5 }|j                          |j                          d d d        j                  dk(  sJ y # 1 sw Y   sxY w# 1 sw Y   exY w# 1 sw Y   3xY w)N$psutil._psplatform.Process.cpu_timesre   r   r2   r3   r   r\   oneshotr   
call_countr7   rD   r   s      r;   test_oneshotzTestProcess.test_oneshot  s    NNZZ>? 	%1  <<1$$$		% ZZ>? 	1KKMKKM	 ||q    	% 	%	 	s.   C!CC!C&C	CC#&C/c           	         t        j                         }t        j                  d      5 }t        j                  d      5 }|j	                         5  |j                          |j                          |j	                         5  |j                          |j                          d d d        d d d        |j                  dk(  sJ |j                  dk(  sJ 	 d d d        d d d        t        j                  d      5 }|j                          |j                          d d d        j                  dk(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w# 1 sw Y   }xY w# 1 sw Y   KxY w)Nr@  z(psutil._psplatform.Process.oneshot_enterre   r   rA  )r7   rD   m1m2r   s        r;   test_oneshot_twicezTestProcess.test_oneshot_twice  s*    NNZZ>? 		*2FG *2YY[ &KKMKKM &&& }})))}})))*		* ZZ>? 	1KKMKKM	 ||q   & && &* *		* 		*	 	s_   E E1E!D6	#E+*EE;!E&6D?;EEEE	EE#&E/c                    | j                         \  }}|j                         }|j                         }||k7  sJ |j                         5  |j                         |k(  sJ |j                         |k(  sJ 	 d d d        |j                         5  |j                         |k(  sJ |j                         |k(  sJ 	 d d d        y # 1 sw Y   NxY w# 1 sw Y   y xY wr0   )rv   r  rB  )r7   p1p2p1_ppidp2_ppids        r;   test_oneshot_cachezTestProcess.test_oneshot_cache.  s     ))+B'')'')'!!!ZZ\ 	(779'''779'''	( ZZ\ 	(779'''779'''	( 	(	( 	(	( 	(s   +C+CCCc                 *     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>   ro  r~   z didn't raise NSP and returned z instead>   r  r  )r   r   r2   r  r5   r_   r
   )funfun_namer   r7   s      r;   assert_raises_nspzFTestProcess.test_halfway_terminated_process.<locals>.assert_raises_nspE  s    e x?:iig<SG8L  '' '' && x+EEs   , &A4A42A4c                  D     j                   t        j                         vS r0   )r4   r2   r  ra  s   r;   r  z=TestProcess.test_halfway_terminated_process.<locals>.<lambda>\  s    quuFKKM9 rP   )	r<   rR   rH   r   r    rL   r$   iterall)r7   rT  nsrR  r~   rD   s   `    @r;   test_halfway_terminated_processz+TestProcess.test_halfway_terminated_process=  sw    	& 		9:q!q! 	)ICc4(	)rP   c                 L    | j                         \  }}| j                  |       y r0   )spawn_zombieassertProcessZombie)r7   _parentzombies      r;   test_zombie_processzTestProcess.test_zombie_processc  s"    ++-  (rP   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   rZ   )r2   r3   r   r\   r  ri  r   rD  s      r;   $test_zombie_process_is_running_w_excz0TestProcess.test_zombie_process_is_running_w_exch  s]     NNZZ&*>*>q*A
 	<<>!>88O8		 	 	s   !A**A3c                    t        j                         }t        j                  dt        j                  d            5 }|j                         t         j                  k(  sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nz!psutil._psplatform.Process.statusr   rZ   )r2   r3   r   r\   r  r  r  r   rD  s      r;    test_zombie_process_status_w_excz,TestProcess.test_zombie_process_status_w_excs  sl     NNZZ/,,Q/
 	 88:!5!555588O8	 	 	s   2A;;Bc                 &   | j                         }t        j                  |j                        }|j                  |j	                         dz   f|_        t        t        j                                |j                  t        j                  v sJ |j                         rJ t        j                  j                  t        j                  dd      5  t        j                  t!        j"                               5 }t        t        j                                d d d        d d d        d|j                   j%                         v sJ |j                  t        j                  vsJ |t        j                  |j                        k7  sJ d}t'        |      }|j)                  |j*                  |j,                  z   d      D ]U  \  }}| j/                  |      5  t1        j2                  t        j4                  |	      5   |        d d d        d d d        W d
t7        |      v sJ d
t9        |      v sJ t1        j2                  t        j4                  |	      5  |j;                          d d d        t1        j2                  t        j4                  |	      5  |j=                          d d d        t1        j2                  t        j4                  |	      5  |j?                          d d d        t1        j2                  t        j4                  |	      5  |jA                          d d d        y # 1 sw Y   xY w# 1 sw Y    xY w# 1 sw Y   ExY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   PSUTIL_DEBUGTz+refreshing Process instance for reused PID z4process no longer exists and its PID has been reusedF)clear_cache)r~   r   zterminated + PID reused)!r1   r2   r3   r4   r   _identr  r$  _pmapri  r   r\   object_common
contextlibredirect_stderrioStringIOgetvaluer$   rV  setterskillersr  r%   rA   r5   r  reprr  r
  r  r  )r7   subprD   r   msgrX  rR  r~   s           r;   test_reused_pidzTestProcess.test_reused_pid  s   ""$NN488$EE1==?S01V  "#uu$$$<<>!! ZZv~~~tD 	,++BKKM: ,aV((*+,	, :!%%Azz|	
 uuFLL(((FNN488,,,,Dq!bjj!8eL 	IC4( ]]6#7#7sC E 	
 )CF222(DG333]]6//s; 	FFH	]]6//s; 	HHJ	]]6//s; 	IIK	]]6//s; 	JJL	 	3, ,	, 	,  	 		 		 		 	sx   (L<8L/L<&M>M	MM#M/M;N/L9	4L<<M	MMM 	#M,/M8;NNc                 J   dt        j                         vrt        j                  t         j                        5  t        j
                  d       d d d        t        j                  d      rJ t        j
                  d      j                         dk(  sJ y t        j
                  d      }t        rt         j                  nt        }t        j                  |      5  |j                          d d d        t        j                  |      5  |j                          d d d        t        j                  |      5  |j                          d d d        t        j                  |      5  |j                          d d d        t        j                  |      5  |j                          d d d        t        j                  |      5  |j!                  t"        j$                         d d d        t'        |      }|j)                  |j*                  |j,                  z         D ]W  \  }}	  |       }|dv r|j.                  dk(  r"J |dk(  r t        rdnd}|j1                         |k(  rGJ |dk(  sO|rRJ |        t2        s0dt        j                         v sJ t        j                  d      sJ y y # 1 sw Y   bxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   mxY w# 1 sw Y   LxY w# 1 sw Y   xY w# t         j                  $ r Y w xY w)Nr   re   >   r  r  r  zNT AUTHORITY\SYSTEMrootr~   )r2   r  r%   rA   r5   r3   
pid_existsr  r   r_   r   rH   rR   rq   rr   rG   rU   rI   rJ   r$   rV  gettersrp  r  r  r
   )r7   rD   r  rX  rR  r~   r   r   s           r;   
test_pid_0zTestProcess.test_pid_0  s~   FKKM!v334 "q!" ((+++>>!$))+q000NN1%,f!!*]]3 	FFH	]]3 	KKM	]]3 	IIK	]]3 	HHJ	]]3 	FFH	]]3 	*MM&..)	* q!bjj!89 	&IC&e ++88q=(=Z'5<1&D::<4///V^%%4	& %%%$$Q''' O" "	 		 		 		 		 		* 	* && se   J0J=K
:K(K$K1 K>&L0J:=K
KK!$K.1K;>LL"!L"c                     d }d | _         t        j                         } ||j                               } |t        j                  j                               }t        st        r||k(  sJ y y y )Nc           	      B   g d}t         r|j                  g d       |D ]  }| j                  |d         | j                         D ci c]H  \  }}|j	                  dd      j	                  dd      |j	                  dd      j	                  dd      J c}}S c c}}w )N)PLATHOMEPYTEST_CURRENT_TESTPYTEST_VERSION)__CF_USER_TEXT_ENCODINGVERSIONER_PYTHON_PREFER_32_BITVERSIONER_PYTHON_VERSIONr  rm  
)r   r  popr'  rr  )r=  excluder~   kvs        r;   
clean_dictz,TestProcess.test_environ.<locals>.clean_dict  s    OG      "dD!" GGI	 Aq 		$#++D"5qyy"8'$#$  s   
AB)maxDiffr2   r3   r  r?   copyr   r   )r7   r  rD   d1d2s        r;   test_environzTestProcess.test_environ  sX    	$ NN		$

)*~8O8 &srP   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)stdinrd   rP   r  3)ACr   )textwrapdedentr"   r   r1   rg   rh   r2   r3   r4   r,   ri  rd   r   r   r   r  r_   communicate
returncode)r7   rN   cexer:   rD   envs         r;   test_weird_environzTestProcess.test_weird_environ  s        DOO-d;##F*//*// $ 
 NN599%QUU||~~||  "c)))Ziik ))+CCc****1$$$ &&  s   D! !D76D7N)h__name__
__module____qualname____doc__r<   rE   rO   rS   rW   r%   markskipifr   r`   rj   r	   rs   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   r+  r;  rC  r   r]  rd  rg  rj  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  r  r  r  r  r*  r,  r/  r1  r>  rE  rI  rO  rY  r_  ra  rc  ru  rz  r   r  r   r  r   rP   r;   r.   r.   I   s|   )""	" [[E	+6
# 7
#"6 [['89. :.2/."(	'
L> [[,,_E8 F8L$ [[E	,7	' 8	' [[00IU+$ , J$L [[J?[[E	,7) 8 @)V [[J?[[?  - @-4 [[J?$ @$. [[J?
6 @
6 [[J?A @A$ [[J?A @A [[J?	4 @	4&" [[GN;# <#
 [[K@5 A5& 5)[[K@
 A * 
  + +<!  [[O+OD.- E.-` [[O+OD	. E	.,"6>6 [[%56" 7"*5 [[%9:7 ;7Z [[E	,7
. 8
. [[E	,7
. 8
.@D31"&
D [[,,_E$( F$(L [[,,_E
$ F
$ [[,,_E= F=, [[O4#. 5#.L [[O46 564 [[E	,7$ 8$ U+[[6"D  N ,N';( 1 143)($32&h!!(($)L [[E	,7) 8) [[E	,7 8 [[E	,7	 8	'R,(\ [[K@ A4 [[K@[[E	,7[[M   [[A  %%	 8 A%%rP   r.   c                   8    e Zd ZdZed        Zd Zd Zd Zd Z	y)	TestPopenzTests for psutil.Popen class.c                     t                y r0   r&   )clss    r;   tearDownClasszTestPopen.tearDownClass*  s    rP   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)Nrb   3import time; [time.sleep(0.1) for x in range(100)];stdoutrd   r  rf   )r   r2   Popenrg   rh   r   r~   r   r  r   r%   rA   rB   r5  rR   r   rH   rI   rJ   r7   ri   procs      r;   	test_misczTestPopen.test_misc.  s    
 A

 \\????	
 	
 IIKNNJJt99~. NN	 99Q<FNN?22299Q<6>>111 	 	s%   AD D#D D	D  D)c                    t        j                  t        dgt        j                  t        j                  t        j                  t
              5 }|j                          d d d        j                  j                  sJ |j                  j                  sJ |j                  j                  sJ |j                  dk(  sJ y # 1 sw Y   cxY w)Nz-V)r  rd   r  r  r   )r2   r  r   rg   rh   r   r  r  closedrd   r  r  )r7   r  s     r;   test_ctx_managerzTestPopen.test_ctx_managerI  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Nrb   r  r  )r   r2   r  rg   rh   r   rR   rH   r%   rA   r5   rG   rU   rI   rJ   r   CTRL_C_EVENTCTRL_BREAK_EVENTr  s      r;   test_kill_terminatezTestPopen.test_kill_terminateW  s{   
 A

 \\????	
 	>
 NNIIKv334 ! !v334 		v334 1  01]]6#7#78 :$$V%8%89:]]6#7#78 >$$V%<%<=>#	> 	>! ! 1 1: :> >#	> 	>s   AH
G+H
G+H
? G&1H
 G20+H
 G>;H
G	H
G#	H
&G/	+H
2G;	7H
>H	H

Hc                 f   t         ddg}t        j                  |t        j                  t        j                  t
              5 }|j                          |j                          t        j                  t              5  |j                   d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wr  )r   r2   r  rg   rh   r   rR   rH   r%   rA   rB   r5  r  s      r;   test__getattribute__zTestPopen.test__getattribute__t  s    A

 \\????	
 		
 NNIIK~. 		 		 		 		s$   :B'=B
B'B$	 B''B0N)
r  r  r  r  classmethodr  r  r  r  r  r   rP   r;   r  r  '  s+    ' 26$>:rP   r  )>r  r"  rk  r  r  rm  r  r?   rI   r  rR  r  rg   rp  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   rP   r;   <module>r     s    &     	  	      
              $ # ' ' ) $ # ( ) - # $ %  # ' ' # # , % & *  & )  . 0 %V%. V%|.\ \rP   