
    gn                     @   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 dd2l"mBZB  G d3 d4e4          ZCer! ejD                    dk    r G d5 d6eC          ZE G d7 d8e4          ZFdS )9Tests for psutil.Process class.    N)AIX)BSD)LINUX)MACOS)NETBSD)OPENBSD)OSX)POSIX)SUNOS)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                   >   e Zd ZdZd Zd Zd Zd Zd Ze	j
                            e d          d	             Zd
 Ze	j
                            ed          d             Zd Zd Zd Zd Zd Ze	j
                            ed          d             Ze	j
                            ed          d             Ze	j
                            e d          d             Zd Ze	j
                            e d          d             Ze	j
                            e d           ee          d                         Z e	j
                            e! d          e	j
                            e d          d                         Z"e	j
                            e! d          e	j
                            e# d          d                         Z$e	j
                            e% d          d              Z&e	j
                            e% d          d!             Z'e	j
                            e% d          d"             Z(e	j
                            e% d          d#             Z)e	j
                            e% d          d$             Z*d% Z+e	j
                            e# d&          d'             Z,e	j
                            e- d          d(             Z. e/             e0e1          e	j
                            e- d          d)                                     Z2 e/            d*             Z3d+ Z4e	j
                            e5 d          d,             Z6e	j
                            e5 d          d-             Z7d. Z8d/ Z9e	j
                            ed          d0             Z:d1 Z;e	j
                            e<d2          d3             Z=d4 Z>e	j
                            e<ped5          e	j
                            ed6          d7                         Z?e	j
                            e@d8          e	j
                            eAd9          e	j
                            e<d2          e	j
                            ed:          d;                                                 ZBe	j
                            e d          d<             ZCe	j
                            e d          d=             ZDd> ZEe	j
                            ed          d?             ZFd@ ZGdA ZHdB ZIe	j
                            eJ d          dC             ZKe	j
                            eJ d          dD             ZLe	j
                            eJ d          dE             ZMe	j
                            eNdF          e	j
                            eOdG          dH                         ZPe	j
                            eNdF          e	j
                            eOdG          dI                         ZQe	j
                            e d          dJ             ZR ee          e	j
                            eSpedK          dL                         ZTdM ZUdN ZVdO ZWe	j
                            ed           e/            dP                         ZXdQ ZYdR ZZdS Z[dT Z\dU Z]dV Z^dW Z_dX Z`dY ZadZ Zbd[ Zce	j
                            e d          d\             Zde	j
                            e d          d]             Zee	j
                            e d          d^             Zfd_ Zgd` Zhe	j
                            ei d          da             Zje	j
                            ei d          e	j
                            e d          e	j
                            ekdb          e	j
                            edc          dd                                                 ZldeS )fTestProcessr   c                      | j         |i |}	 t          j        |j                  S # t          j        $ r |                     |j                    w xY wN)spawn_testprocpsutilProcesspidNoSuchProcessassertPidGone)selfargskwargssprocs       U/var/www/html/ai-engine/env/lib/python3.11/site-packages/psutil/tests/test_process.pyspawn_psproczTestProcess.spawn_psprocS   sg    ##T4V44	>%),,,# 	 	 	uy)))	s	   ( +Ac                     t          j                    }|j        t          j                    k    sJ t          j        t                    5  d|_        d d d            d S # 1 swxY w Y   d S )N!   )r:   r;   r<   osgetpidr-   raisesAttributeErrorr?   ps     rC   test_pidzTestProcess.test_pid]   s    Nu	####]>** 	 	AE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A  A$'A$c                    |                                  }|                                 |                                }t          r|t          j        k    sJ n|t          j         k    sJ |                     |           d S r8   )rD   killwaitr   signalSIGTERMSIGKILLassertProcessGoner?   rL   codes      rC   	test_killzTestProcess.test_killc   sz    	vvxx 	+6>)))))FN?****q!!!!!    c                    |                                  }|                                 |                                }t          r|t          j        k    sJ n|t          j         k    sJ |                     |           d S r8   )rD   	terminaterP   r   rQ   rR   rT   rU   s      rC   test_terminatezTestProcess.test_terminatem   sz    	vvxx 	+6>)))))FN?****q!!!!!rX   c                    t           rt          j        nt          j        }|                                 }|                    |           |                                }t          r	||k    sJ n	|| k    sJ |                     |           d S r8   )	r   rQ   rS   rR   rD   send_signalrP   r   rT   )r?   sigrL   rV   s       rC   test_send_signalzTestProcess.test_send_signalw   s     %9fnn6>	cvvxx 	 3;;;;;C4<<<<q!!!!!rX   z	not POSIXreasonc                    t           j        }|                                 }t          j        dt          t          j        d                    5  t          j	        t          j                  5  |                    |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                                 }t          j        dt          t          j        d                    5  t          j	        t          j                  5  |                    |           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nzpsutil.os.kill side_effect)rQ   rR   rD   r+   patchOSErrorerrnoESRCHr-   rI   r:   r=   r]   EPERMAccessDenied)r?   r^   rL   s      rC   test_send_signal_mockedz#TestProcess.test_send_signal_mocked   s.   nZ'%+r*B*B
 
 
 	# 	# v344 # #c"""# # # # # # # # # # # # # # #	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# Z'%+r*B*B
 
 
 	# 	# v233 # #c"""# # # # # # # # # # # # # # #	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#sl   B'.BB'B	B'B	B''B+.B+4ED5)E5D9	9E<D9	=EEEc                    t           ddg}|                     |          }|                                }|dk    sJ |                     |           t           ddg}|                     |t          j                  }|                                }|dk    sJ |                     |           t           ddg}|                     |          }|                                }|dk    sJ |                     |           t           dd	g}|                     |          }|                                }|dk    sJ |                     |           d S )
N-cpassr   z1 / 0)stderr   zimport sys; sys.exit(5);   zimport os; os._exit(5);)r"   rD   rP   rT   
subprocessPIPE)r?   cmdrL   rV   s       rC   test_wait_exitedzTestProcess.test_wait_exited   sG    4(c""vvxxqyyyyq!!!4)c*/::vvxxqyyyyq!!!4!;<c""vvxxqyyyyq!!!4!:;c""vvxxqyyyyq!!!!!rX   zfails on NETBSDc                    |                                  }t          rA|                    t          j                   t          j        t          j                  5  |	                    d           d d d            n# 1 swxY w Y   |                    t          j
                   t          j        t          j                  5  |	                    d           d d d            n# 1 swxY w Y   |                    t          j                   |	                                t          j         k    sJ |	                                t          j         k    sJ d S |                                 t          j        t          j                  5  |	                    d           d d d            n# 1 swxY w Y   |                                 t          j        t          j                  5  |	                    d           d d d            n# 1 swxY w Y   |                                 |	                                t          j        k    sJ |	                                t          j        k    sJ d S )NMbP?)timeout)rD   r   r]   rQ   SIGSTOPr-   rI   r:   TimeoutExpiredrP   SIGCONTrR   suspendresumerZ   rK   s     rC   test_wait_stoppedzTestProcess.test_wait_stopped   s    	. MM&.)))v455 & &u%%%& & & & & & & & & & & & & & &MM&.)))v455 & &u%%%& & & & & & & & & & & & & & &MM&.)))6688....6688......IIKKKv455 & &u%%%& & & & & & & & & & & & & & &HHJJJv455 & &u%%%& & & & & & & & & & & & & & &KKMMM6688v~----6688v~------sH   A==BBC((C,/C,F33F7:F70HHHc                    |                                  \  }}t          j        t          j                  5  |                    d           d d d            n# 1 swxY w Y   t          j        t          j                  5  |                    d           d d d            n# 1 swxY w Y   |                                 |                                 |                                }|                                }t          r|t          j	         k    sJ |J d S |t          j	        k    sJ |t          j	        k    sJ d S )N{Gz?)
spawn_children_pairr-   rI   r:   r{   rP   rZ   r   rQ   rR   )r?   child
grandchild	child_retgrandchild_rets        rC   test_wait_non_childrenz"TestProcess.test_wait_non_children   s    !4466z]6011 	 	JJt	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]6011 	" 	"OOD!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	JJLL	#** 	///// ")))))..........s#   AAAB##B'*B'c                    |                                  }|                                 t          j        t          j                  5  |                    d           d d d            n# 1 swxY w Y   t          j        t          j                  5  |                    d           d d d            n# 1 swxY w Y   t          j        t                    5  |                    d           d d d            d S # 1 swxY w Y   d S )Nr   r   )rD   namer-   rI   r:   r{   rP   
ValueErrorrK   s     rC   test_wait_timeoutzTestProcess.test_wait_timeout   s   	]6011 	 	FF4LLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]6011 	 	FF1III	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]:&& 	 	FF2JJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s6   A))A-0A-B44B8;B8C;;C?C?c                    |                                  }t          j        t          j                  5  |                    d           d d d            n# 1 swxY w Y   |                                 t          j                    t          z   }t          j                    |k     rC	 |                    d          }nA# t          j        $ r Y nw xY wt          j                    |k     C| 	                    d          t          r|t          j         k    sJ n|t          j        k    sJ |                     |           d S )Nr   ry   )rD   r-   rI   r:   r{   rP   rO   timer   failr   rQ   rS   rR   rT   )r?   rL   stop_atrV   s       rC   test_wait_timeout_nonblockingz)TestProcess.test_wait_timeout_nonblocking   sf   ]6011 	 	FF1III	 	 	 	 	 	 	 	 	 	 	 	 	 	 		)++.ikkG##vvayy(   	 ikkG## ))I&&& 	*FN?*****6>))))q!!!!!s#   AAA'B= =CCc                    t          j                    }|                    d           |                    d           t          d          D ]7}|                    d           }t	          |t
                    sJ |dk    sJ 8t          j        t                    5  |                    d           d d d            d S # 1 swxY w Y   d S )Nrx   )intervald           r   )	r:   r;   cpu_percentrange
isinstancefloatr-   rI   r   )r?   rL   _percents       rC   test_cpu_percentzTestProcess.test_cpu_percent   s   N	u%%%	u%%%s 	" 	"AmmTm22Ggu-----c>>>>>]:&& 	' 	'MM2M&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's    CCCc                     t          j        dd           5 }t          j                                                     |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Nzpsutil.cpu_count)return_value)r+   rf   r:   r;   r   called)r?   ms     rC   test_cpu_percent_numcpus_nonez)TestProcess.test_cpu_percent_numcpus_none  s    Z*>>> 	!N((***8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   /AAAzQEMU user not supportedc           
         t          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 ]7}t          j        dt          j        t          ||                               8d S )Nr   z%H:%M:%S)r:   r;   	cpu_timesusersystemchildren_userchildren_systemr   iowait_fieldsr   strftime	localtimegetattr)r?   timesr   s      rC   test_cpu_timeszTestProcess.test_cpu_times  s      **,,zS   %   |s"""E""""c)))5)))$+++U+++ 	.<3&&&&&&M 	L 	LDM*dnWUD5I5I&J&JKKKK	L 	LrX   c                    t          j                                                    d d         \  }}t          j                    d d         \  }}t          ||g          t          ||g          z
  dk    r|                     d|d|          t          ||g          t          ||g          z
  dk    r|                     d|d|          d S )N   皙?
expected: 	, found: )r:   r;   r   rG   r   maxminr   )r?   	user_timekernel_timeutimektimes        rC   test_cpu_times_2zTestProcess.test_cpu_times_2  s    !'!1!1!;!;!=!=bqb!A	;xzz"1"~u
 E"##c9e*<&=&==DD)))		JKKKe$%%[%,@(A(AASHH)))LMMM IHrX   znot supportedc                    t          j                    }|                                }|dk    sJ t          j                    dk    r|dk    sJ |                                t	          t          j                              v sJ d S Nr   rq   )r:   r;   cpu_num	cpu_countr   )r?   rL   nums      rC   test_cpu_numzTestProcess.test_cpu_num)  sz    Niikkaxxxx""!8888yy{{eF$4$6$677777777rX   c                 Z   |                                  }t          j                    }|                                }t          ||z
            }|dk    r|                     d|d|d|          t          j        dt          j        |                                                     d S )Nr   r   r   z, difference: z%Y %m %d %H:%M:%S)rD   r   create_timeabsr   r   r   )r?   rL   nowr   
differences        rC   test_create_timezTestProcess.test_create_time2  s    ikkmmoo
 s*++
>>)))33ZZ1   	)4>!--//+J+JKKKKKrX   z
POSIX onlyc                    t          j                                                    }|Y	 t          j                            t          d                    }||k    sJ d S # t          $ r t          j	        d          w xY wd S )Nttyzcan't rely on `tty` CLI)
r:   r;   terminalrG   pathrealpathr1   RuntimeErrorr-   skip)r?   r   r   s      rC   test_terminalzTestProcess.test_terminalD  s    >##,,..'g&&r%yy11
  3	   = = =k";<<<=  s   ,A A>)only_ifc                    t          j                    }|                                }t          t          d          5 }|                                 d d d            n# 1 swxY w Y   |                                }t          sWt          sP|j        |j        k    sJ |j	        |j	        k    sJ t          r$|j        |j        k    sJ |j        |j        k    sJ n$|j        |j        k    sJ |j        |j        k    sJ |                                }t          |                                 d          5 }t           r'|                    t%          ddz  d                     n|                    ddz             d d d            n# 1 swxY w Y   |                                }|j	        |j	        k    sJ |j        |j        k    sJ |j        |j        k    sJ |j        |j        k    sJ t          r$|j        |j        k    sJ |j        |j        k    sJ t'          t)          |                    D ],}t          r|dk    r||         dk    sJ ||         dk    sJ -d S )Nrbwbxi@B asciir   r   )r:   r;   io_countersopenr"   readr   r   
read_countwrite_countr   
read_charswrite_chars
read_byteswrite_bytes
get_testfnr   writebytesr   len)r?   rL   io1fio2is         rC   test_io_counterszTestProcess.test_io_countersP  s    Nmmoo*d## 	qFFHHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	mmoo 	63 	6>CN2222?co5555 :~6666#/9999>S^3333?co5555 mmoo$//##T** 	'a 'cGmW556666g&&&		' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'
 mmoo#/1111#/1111~////~//// 	4?S_4444>S^3333 s3xx 	 	A qAvvq6Q;;;;q6Q;;;;;	 	s$   AA"%A"5AFFFz
linux onlyc                    fd}t          j                    t          s*                                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                                 }|                     ||                               t           j                   t                                                    t           j        dfk    sJ t          j        t                    5                      t           j        d           d d d            n# 1 swxY w Y                       t           j                   t                                                    t           j        dfk    sJ                     t           j        d           t                                                    t           j        dfk    sJ t          j        t                    5                      t           j        d           d d d            n# 1 swxY w Y   	                     t           j        d           n# t           j        $ r Y nw xY wt          j        t          d	
          5                      t           j        d           d d d            n# 1 swxY w Y   t          j        t          d	
          5                      t           j        d           d d d            n# 1 swxY w Y   t          j        t          d
          5                      d           d d d            d S # 1 swxY w Y   d S )Nc                 b    | \  }}|t           j        k    rd}                    ||           d S Nr   )r:   IOPRIO_CLASS_NONEionice)initioclassvaluerL   s      rC   cleanupz.TestProcess.test_ionice_linux.<locals>.cleanup~  s9    !NGU&222HHWe$$$$$rX   r   rq   r         r      zioclass accepts no valuematchz$'ioclass' argument must be specified)r:   r;   r   r   r   IOPRIO_CLASS_RTIOPRIO_CLASS_BEIOPRIO_CLASS_IDLE
addCleanuptupler-   rI   r   rk   )r?   r   r   rL   s      @rC   test_ionice_linuxzTestProcess.test_ionice_linux{  sc   	% 	% 	% 	% 	% N 	=88::a=F$<<<<<'1,,,,%****%****'1,,,,xxzz&&& 	
)***QXXZZ  V%=q$AAAAA]:&& 	8 	8HHV-QH777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	
'(((QXXZZ  V%;Q$?????	'q111QXXZZ  V%;Q$?????]:&& 	6 	6HHV+1H555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6	HHV+1H5555" 	 	 	D	 ]:-GHHH 	2 	2HHV-q111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2]:-GHHH 	2 	2HHV-q111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2]D
 
 
 	 	 HH1H	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sl   ("EEE "III!I< <JJ,!KK K?!L,,L03L0M66M:=M:z!not supported on this win versionc                    t          j                    }t          s$|                                t           j        k    sJ |                                }|                     |j        |           |                    t           j                   |                                t           j        k    sJ |                    t           j                   |                                t           j        k    sJ 	 |                    t           j                   |                                t           j        k    sJ n# t           j	        $ r Y nw xY wt          j        t          d          5  |                    t           j        d           d d d            n# 1 swxY w Y   t          j        t          d          5  |                    t           j        dz              d d d            d S # 1 swxY w Y   d S )Nz&value argument not accepted on Windowsr   rq   r   zis not a valid priority)r:   r;   r   r   IOPRIO_NORMALr   IOPRIO_VERYLOW
IOPRIO_LOWIOPRIO_HIGHrk   r-   rI   	TypeErrorr   )r?   rL   r   s      rC   test_ionice_winzTestProcess.test_ionice_win  sA   
 N 	688::!55555xxzz$''' 	
&'''xxzzV22222	"###xxzzV.....	4HHV'((( 88::!333333 " 	 	 	D	
 ]E
 
 
 	4 	4 HHV)H333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 ]:-FGGG 	- 	-HHV'!+,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s6   5D9 9E
E)"FFF=#G--G14G1c                 8   dd l }t          j        t          j                              }d t          t                    D             }|s
J |            |D ]}t          t          |          }|dk    sJ |t          |          v rM|t          ||          k    sJ t          rN|                    |          |	                    |          k    sJ }|                    |          }t          |          dk    sJ |d         dk    sJ |d         dk    sJ d S )Nr   c                 <    g | ]}|                     d           |S )RLIMIT
startswith.0r   s     rC   
<listcomp>z/TestProcess.test_rlimit_get.<locals>.<listcomp>  s)    BBBq1<<+A+ABBBBrX   r   r   rq   )resourcer:   r;   rG   rH   dirr   r!   rlimit	getrlimitr   )r?   r  rL   namesr   r   rets          rC   test_rlimit_getzTestProcess.test_rlimit_get  s-   N29;;''BBCKKBBBe 	$ 	$DFD))EA::::s8}}$$$ 7 77777  xx(*<*<U*C*CCCCCChhuoo3xx1}}}}1v||||1v|||||	$ 	$rX   c                 4   |                                  }|                    t          j        d           |                    t          j                  dk    sJ t          ret          j        t          d          5  t          j        	                    d                              d           d d d            n# 1 swxY w Y   t          j        t                    5  |                    t          j        d           d d d            d S # 1 swxY w Y   d S )N)rr   rr   zcan't use prlimitr   r   )rr   rr   rr   )
rD   r  r:   RLIMIT_NOFILEr   r-   rI   r   _psplatformr;   rK   s     rC   test_rlimit_setzTestProcess.test_rlimit_set  so   	%v...xx,--7777  	8z1DEEE 8 8"**1--44Q7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8]:&& 	6 	6HHV)9555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s$   <3B;;B?B?!DDDc                    t          j                    }|                                 }|                    t           j                  \  }}	 |                    t           j        d|f           t          |d          5 }|                    d           d d d            n# 1 swxY w Y   t          j        t                    5 }t          |d          5 }|                    d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          r|j        j        n|j        d         t          j        k    sJ 	 |                    t           j        ||f           |                    t           j                  ||fk    sJ d S # |                    t           j        ||f           |                    t           j                  ||fk    sJ w xY w)N   r   s   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXs  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr   )r:   r;   r   r  RLIMIT_FSIZEr   r   r-   rI   IOErrorr   r   rh   EFBIG)r?   rL   testfnsofthardr   excs          rC   test_rlimitzTestProcess.test_rlimit  sa   N""XXf122
d	AHHV(4,777fd## %q$$$% % % % % % % % % % % % % % % w'' )3&$'' )1GGK((() ) ) ) ) ) ) ) ) ) ) ) ) ) )) ) ) ) ) ) ) ) ) ) ) ) ) ) ) (+<CIOO	!LLLLLHHV(4,77788F/00T4L@@@@@@ HHV(4,77788F/00T4L@@@@@@@@sy   2F =BF B##F &B#'F DC6*D6C:	:D=C:	>DF DF D3F AGc                    t          j                    }|                    t           j                  \  }}	 |                    t           j        d|f           |                    t           j        t           j        |f           t          |                                 d          5 }|                    d           d d d            n# 1 swxY w Y   |                    t           j        ||f           |                    t           j                  ||fk    sJ d S # |                    t           j        ||f           |                    t           j                  ||fk    sJ w xY w)Nr  r   s   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)r:   r;   r  r  RLIM_INFINITYr   r   r   )r?   rL   r  r  r   s        rC   test_rlimit_infinityz TestProcess.test_rlimit_infinity  s|    NXXf122
d	AHHV(4,777HHV(6+?*FGGGdoo''.. %!$$$% % % % % % % % % % % % % % % HHV(4,77788F/00T4L@@@@@@ HHV(4,77788F/00T4L@@@@@@@@s1   A0D 'C	=D 	CD CD AE*c                     t          j                    }|                    t           j                  \  }}|t           j        k    sJ |                    t           j        ||f           d S r8   )r:   r;   r  r  r!  )r?   rL   r  r  s       rC   test_rlimit_infinity_valuez&TestProcess.test_rlimit_infinity_value  s^     NXXf122
dv+++++	$tTl33333rX   c                 j   t          j                    }t          r=	 |                                }n;# t           j        $ r t          j        d          w xY w|                                }t                      5  |                                }||dz   k    sJ 	 d d d            d S # 1 swxY w Y   d S )N$on OpenBSD this requires root accessrq   )r:   r;   r	   num_threadsrk   r-   r   r&   )r?   rL   step1step2s       rC   test_num_threadszTestProcess.test_num_threads  s    N 	$J& J J Jk"HIIIJ MMOOE\\ 	& 	&MMOOEEAI%%%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   1 $A: B((B,/B,zWINDOWS onlyc                 `    t          j                    }|                                dk    sJ d S r   )r:   r;   num_handlesrK   s     rC   test_num_handleszTestProcess.test_num_handles*  s0     N}}""""""rX   c                     t          j                    }t          r=	 |                                }n;# t           j        $ r t          j        d          w xY w|                                }t                      5  |                                }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            d S # 1 swxY w Y   d S )Nr&  rq   r   r   )r:   r;   r	   threadsrk   r-   r   r&   r   idr   system_time)r?   rL   r(  r)  athreads        rC   test_threadszTestProcess.test_threads0  s]   N 	 J		& J J Jk"HIIIJ IIKKE\\ 	5 	5IIKKEu::Ua////AhG:++++$
2222&'!*44444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s   1 $A:A;DD
Dc                    |                                  }t          r=	 |                                 n'# t          j        $ r t          j        d          w xY wt          |                                j	        t          d |                                D                       z
            dk     sJ t          |                                j        t          d |                                D                       z
            dk     sJ d S )Nr&  c                     g | ]	}|j         
S  )r   r  s     rC   r
  z.TestProcess.test_threads_2.<locals>.<listcomp>O  s    )K)K)K!!+)K)K)KrX   r   c                     g | ]	}|j         
S r6  )r1  r  s     rC   r
  z.TestProcess.test_threads_2.<locals>.<listcomp>U  s    :::q}:::rX   )rD   r	   r/  r:   rk   r-   r   r   r   r   sumr   rK   s     rC   test_threads_2zTestProcess.test_threads_2D  s      	JJ		& J J Jk"HIIIJ "S)K)Kqyy{{)K)K)K%L%LLMM    $::aiikk:::;;<  	     s	   2 $Ac                 <   t          j                    }|                                d d         \  }}|                                }|dk    sJ |dk    sJ d gdz  }|                                d d         \  }}|                                }||k    sJ ||k    sJ ||k    sJ ~t          r8|                                }	|	j        |	j        k    sJ |	j        |	j        k    sJ |                                }	|	j	        D ]}
t          |	|
          dk    sJ d S )Nr   r   i` )r:   r;   memory_infomemory_percentr   rsswsetvmspagefiler   r   )r?   rL   rss1vms1percent1memarrrss2vms2percent2memr   s              rC   test_memory_infozTestProcess.test_memory_infoZ  sD   N ]]__RaR(
d##%%axxxxaxxxx '!]]__RaR(
d##%% d{{{{t||||("""" 	+--//C7ch&&&&7cl****mmooK 	+ 	+D3%%*****	+ 	+rX   c                    t          j                    }t          j                    j        }|                                }|j        D ]7}t          ||          }|dk    sJ |dk    rt          st          r/||k    sJ 8t          st          st          r|j        dk    sJ t          r|j        dk    sJ |j        dk    sJ d S d S )Nr   r?  )r:   r;   virtual_memorytotalmemory_full_infor   r   r
   r   r   r   usspssswap)r?   rL   rL  rH  r   r   s         rC   test_memory_full_infoz!TestProcess.test_memory_full_infoy  s    N%''-  ""K 	" 	"DC&&EA::::u}}}}E>>>>> 	 G 	 u 	 7a<<<< 	!7a<<<<8q====	! 	! =rX   c                    t          j                    }|                                }t          |          t          t	          |                    k    sJ |                    d          }|D ]}|j                            d          st          r
d|j        v r/t          j        	                    |j                  sJ |j                    t          r	 t          j                            |j                  s3t          j                            |j                  sJ |j                    # t          $ rT t          s t          d          5 }|                                }d d d            n# 1 swxY w Y   d|j        z  |vr Y w xY wdt          j                            |j                  vrU	 t          j        |j                  }t%          j        |j                  sJ |j                    # t*          $ r Y w xY w|D ]b}|j        D ]X}t/          ||          }	|dk    r|d	v r|	s
J |	            *t1          |	t2          t4          f          sJ |	d
k    s
J |	            Ycd S )NF)grouped[z
/bin/qemu-z/proc/self/smapsz%s (deleted)64r   )addrpermsr   )r:   r;   memory_mapsr   setr   r  r$   rG   isabsr   existsislinkAssertionErrorr   r   r   basenamestatS_ISREGst_moder   r   r   r   intr   )
r?   rL   mapsext_mapsntr   datastfnamer   s
             rC   test_memory_mapszTestProcess.test_memory_maps  s   N}}4yyCD		NN****===// 	E 	EB7%%c** E !8!8w}}RW--66rw666 E&!w~~bg66 #"'..G; ; # #7# # # * & & &$ &! "++=!>!> 0!'(vvxx0 0 0 0 0 0 0 0 0 0 0 0 0 0 0-7tCC %  DC& 27#3#3BG#<#<<<E!#!1!1B $(<
#;#;DDRWDDDD  1 ! ! ! D!  		- 		-B - -E**F??--- ''%''''%ec4[99999 A:::u::::-		- 		-sI   AD11!FE3'F3E77F:E7;FF9G<<
H
	H
c                     t          j                    }t                      5 }d fd|                                D             } |          |v sJ 	 d d d            d S # 1 swxY w Y   d S )Nc                 z    t           j                            t           j                            |                     S r8   )rG   r   r   normcaserL   s    rC   normpathz8TestProcess.test_memory_maps_lists_lib.<locals>.normpath  s(    w''(8(8(;(;<<<rX   c                 0    g | ]} |j                   S r6  )r   )r	  r   rn  s     rC   r
  z:TestProcess.test_memory_maps_lists_lib.<locals>.<listcomp>  s%    BBBQ((BBBrX   )r:   r;   r(   rX  )r?   rL   r   libpathsrn  s       @rC   test_memory_maps_lists_libz&TestProcess.test_memory_maps_lists_lib  s     N "" 	.d= = = CBBB!--//BBBH8D>>X-----	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   3A$$A(+A(c                 <   t          j                    }|                                 t          j        t
                    5  |                    d           d d d            n# 1 swxY w Y   t          st          st          r|                    d           d S d S )Nz?!?)memtyperN  )	r:   r;   r<  r-   rI   r   r   r   r   rK   s     rC   test_memory_percentzTestProcess.test_memory_percent  s    N	]:&& 	, 	,U+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,E 	,W 	,U+++++	, 	,s   A$$A(+A(c                 .   |                                  }|                                sJ |                                sJ |                                 |                                 |                                rJ |                                rJ d S r8   )rD   
is_runningrO   rP   rK   s     rC   test_is_runningzTestProcess.test_is_running  s    ||~~||~~		<<>>!!!<<>>!!!!!rX   c                 R   |                                  }|                                }	 |t          k    sJ n# t          $ r t          rVt          |          t          t                    k    r1t          j        j        } ||           |t                    k    sJ nht          j
        d         dt          j
        d         }	 |                    |d          t          j        |d          k    sJ n# t          $ r Y nw xY wY nw xY wt          |ddg          }|dk    sJ d S )Nr   .rq   rc   rn   zimport os; print('hey')hey)rD   exer"   r]  r   r   rG   r   rl  sysversion_inforeplacer1   )r?   rL   r{  rl  verouts         rC   test_exezTestProcess.test_exe  sE   eegg	*$$$$$ 	 	 	 3s88s:667+x}}(<(<<<<<< "%!1!!4!4!4c6Fq6I6IJ;;sB//:3Ec23N3NNNNNN%   D	& #t6788e||||||s4   8 BD
/C76D
7
DD
DD
	D
c                 N   t           ddg}|                     |          }t          r,|                                g k    rt	          j        d          t          st          st          r'|                                d         t           k    sJ d S t          r~t          rw|                                d         }|t           k    rRd
                    |                                dd                    d
                    |dd                    k    sJ d S t          rJd
                    |                                dd                    d
                    |          k    sJ d S d
                    |                                          d
                    |          k    sJ d S )Nrn   2import time; [time.sleep(0.1) for x in range(100)]OPENBSD: returned EBUSYr    rq   r   )r"   rD   r   cmdliner-   r   r	   r   r   r   joinr$   )r?   r  rL   pyexes       rC   test_cmdlinezTestProcess.test_cmdline  s{   @

 g&& 	9aiikkR''+7888  	>W 	> 	>99;;q>Z//////  		AJ&&88AIIKKO448M8MMMMMF xx		ABB00CHHW4E4EEEEE88AIIKK((CHHW,=,=======rX   zbroken on PYPYc                    t           g}|                    dgdz             |                    ddg           |                     |          }t          rD	 |                                |k    sJ d S # t
          j        $ r t          j        d          w xY wt          r$|                                dd          |k    sJ d S |                                }t          r|g k    rt          j        d          ||k    sJ d S )Nz-v2   rn   r  z#OPENBSD: process turned into zombier   r  )r"   extendrD   r	   r  r:   ZombieProcessr-   r   r$   r   )r?   r  rL   r  s       rC   test_long_cmdlinezTestProcess.test_long_cmdline  s#   ,v{###GH	
 	
 	
 g&& 	"Iyy{{g------' I I Ik"GHHHI 	"99;;qrr?g------))++C =#))k";<<<'>>>>>>s   A2 2$Bc                 l   |                                  }|                                                                }t          j                            t          j                            t          j                                                            }|	                    |          sJ ||f            d S r8   )
rD   r   lowerrG   r   r^  r   r|  
executabler  )r?   rL   r   r  s       rC   	test_namezTestProcess.test_name(  s    vvxx~~  !1!1#.!A!ABBHHJJ%%44t}44444rX   zunreliable on PYPYzunreliable on QEMU userc                    t          |                     t          j        dz                      }|ddg}|                     |          }t
          r	 |                                t          j        	                    |          k    sJ d S # t          $ rn |                                t          j        k    rGt          j        	                    |                              |                                          sJ n Y d S w xY w|                                t          j        	                    |          k    sJ d S )Nr   suffixrn   r  )r*   r   stringdigitsrD   r	   r   rG   r   r^  r]  statusr:   STATUS_ZOMBIEr  r?   r  r  rL   s       rC   test_long_namezTestProcess.test_long_name.  s-    dooV]Q5FoGGHH@

 g&& 	7vvxx27#3#3E#:#:::::::!   88::!5557++E22==affhhGGGGGG HGG 6688rw//66666666s   7B A4DDzbroken on SUNOSzbroken on AIXzbroken on QEMU userc                    t          |                     d                    }|ddg}|                     |          }|                                |k    sJ |                                t
          j                            |          k    sJ t
          j                            |	                                          t
          j                            |          k    sJ d S )Nz	foo bar )r  rn   r  )
r*   r   rD   r  r   rG   r   r^  rl  r{  r  s       rC   test_prog_w_funky_namez"TestProcess.test_prog_w_funky_nameK  s     doo[oAABB@

 g&&yy{{g%%%%vvxx27++E222222w((BG,<,<U,C,CCCCCCCrX   c                 D   t          j                    }|                                \  }}}|t          j                    k    sJ |t          j                    k    sJ t          t          d          r+t          j                    |                                k    sJ d S d S N	getresuid)r:   r;   uidsrG   getuidgeteuidhasattrr  r?   rL   real	effective_saveds        rC   	test_uidszTestProcess.test_uids^      N"#&&((iry{{""""BJLL(((( 2{## 	.<>>QVVXX----	. 	.--rX   c                 D   t          j                    }|                                \  }}}|t          j                    k    sJ |t          j                    k    sJ t          t          d          r+t          j                    |                                k    sJ d S d S r  )r:   r;   gidsrG   getgidgetegidr  	getresgidr  s        rC   	test_gidszTestProcess.test_gidsl  r  rX   c                    fd}t          j                    t          j        t                    5                      d           d d d            n# 1 swxY w Y                                   }|                     ||           t          rd }t           j        t           j	        t           j
        t           j        t           j        t           j        fD ]}|                     |          5  	                     |                                           }|t           j        t           j        t           j        fv r||k    s|
|}||k    sJ n||k    sJ n# t           j        $ r Y nw xY wd d d            n# 1 swxY w Y   d S 	 t!          t"          d          rHt#          j        t"          j        t#          j                                                              k    sJ                     d                                           dk    sJ t!          t"          d          rHt#          j        t"          j        t#          j                                                              k    sJ t*          s/                    d                                           dk    sJ d S d S # t           j        $ r Y d S w xY w)Nc                 `    	                      |            d S # t          j        $ r Y d S w xY wr8   )nicer:   rk   )r   rL   s    rC   r   z&TestProcess.test_nice.<locals>.cleanup{  s@    t&   s    --str)priogetpriorityrq   r   )r:   r;   r-   rI   r  r  r   r   IDLE_PRIORITY_CLASSBELOW_NORMAL_PRIORITY_CLASSNORMAL_PRIORITY_CLASSABOVE_NORMAL_PRIORITY_CLASSHIGH_PRIORITY_CLASSREALTIME_PRIORITY_CLASSsubTestrk   r  rG   r  PRIO_PROCESSrH   r   )r?   r   r   highest_prior  new_priorL   s         @rC   	test_nicezTestProcess.test_nicez  s@   	 	 	 	 	 N]9%% 	 	FF5MMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	vvxx&&& 3	L*2,2*. 4 4 \\t\,, 4 44t $%6688
  ">"6":$  
  (4//<3G/3'/<'?'?'?'?#+t#3#3#3#3#3# ".   4 4 4 4 4 4 4 4 4 4 4 4 4 4 44 4<2}-- r	DD6688$ $ $ $ q			vvxx1}}}}2}-- r	DD6688$ $ $ $
  )FF1III6688q====) )(=&   s[   AAA/E<1EAE<E-*E<,E--E<<F 	F 	DJ. .K Kc                 t    t          j                    }|                                t           j        k    sJ d S r8   )r:   r;   r  STATUS_RUNNINGrK   s     rC   test_statuszTestProcess.test_status  s1    NxxzzV2222222rX   c                    |                                  }|                                }t          r|                    d          \  }}t	          j                    }|                    d          rt          j        d          ||k    sJ dt          j
        v r|t          j
        d         k    sJ d S d S |t	          j                    k    sJ d S )N\$zrunning as service account
USERDOMAIN)rD   usernamer   splitgetpassgetuserendswithr-   r   rG   environ)r?   rL   r  domaingetpass_users        rC   test_usernamezTestProcess.test_username  s    ::<< 	1'~~d33FH"?,,L$$S)) @ k">???|++++rz))L!99999 *)99w00000000rX   c                     |                                  }|                                t          j                    k    sJ d S r8   )rD   cwdrG   getcwdrK   s     rC   test_cwdzTestProcess.test_cwd  s8    uuww")++%%%%%%rX   c                 j    t           ddg}|                     |          t          fd           d S )Nrn   zFimport os, time; os.chdir('..'); [time.sleep(0.1) for x in range(100)]c                                                        t          j                            t          j                              k    S r8   )r  rG   r   dirnamer  rm  s   rC   <lambda>z(TestProcess.test_cwd_2.<locals>.<lambda>  s(    15577bgoobikk&B&BB rX   )r"   rD   r'   )r?   ru   rL   s     @rC   
test_cwd_2zTestProcess.test_cwd_2  sH    	
 c""BBBBCCCCCrX   c           	      D   t          j                    }|                                }|s
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 ]}|                    |g           |                                |gk    sJ t	          t
          d          r>|                                t          t          j        |j                            k    sJ t	          |d          r2|                                d         |                                k    sJ |                    g            t          r2|                                |j                                        k    sJ n|                                |k    sJ t	          t
          d          r>|                                t          t          j        |j                            k    sJ t#          j        t&                    5  |                    d           d d d            n# 1 swxY w Y   |                    |           |                    t          |                     |                    t)          |                     d S )Nsched_getaffinityTpercpunum_cpur   rq   )r:   r;   cpu_affinityr   r  rG   listr  r<   r   rY  r   r   r  r   _proc_get_eligible_cpusr-   rI   r  r   )r?   rL   initialall_cpusns        rC   test_cpu_affinityzTestProcess.test_cpu_affinity  s   N..""0002*++ 	@d2#7#>#>??????7||s3w<<000000c&"4D"A"A"ABBCCDD 	: 	:ANNA3>>##s****r.// M~~''40DQU0K0K+L+LLLLLq)$$ :~~''*aiikk9999
 	
r 	0>>##qw'A'A'C'CCCCCC>>##x////2*++ 	I>>##tB,@,G,G'H'HHHHH]9%% 	 	NN1	 	 	 	 	 	 	 	 	 	 	 	 	 	 		w	s8}}%%%	uX'''''s   J<<K K c                    |                                  }t          t          j        d                    dz   g}t	          j        t                    5  |                    |           d d d            n# 1 swxY w Y   t	          j        t                    5  |                    t          dd                     d d d            n# 1 swxY w Y   t	          j        t                    5  |                    ddg           d d d            n# 1 swxY w Y   t	          j        t                    5  |                    ddg           d d d            d S # 1 swxY w Y   d S )	NTr  
   i'  i*  r   1r   )
rD   r   r:   r   r-   rI   r   r  r   r  )r?   rL   invalid_cpus      rC   test_cpu_affinity_errsz"TestProcess.test_cpu_affinity_errs	  s3   6+488899B>?]:&& 	( 	(NN;'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(]:&& 	0 	0NN5..///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0]9%% 	% 	%NNAs8$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%]:&& 	$ 	$NNAr7###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$sH   A66A:=A:$C

CC.DDD6EE"Ec                 8   t          j                    }|                                }|s
J |            |                     |j        |           t	          |          dk    r
|d d         }g }t          t	          |          dz             D ]>}t          j        ||          D ]&}|r"|                    t          |                     '?|D ]K}|                    |           t          |                                          t          |          k    sJ Ld S )N   rq   )r:   r;   r  r   r   r   	itertoolscombinationsappendr  sorted)r?   rL   r  combosr   subsetcombos          rC   "test_cpu_affinity_all_combinationsz.TestProcess.test_cpu_affinity_all_combinations  s*   N..""000 w<<"crclGs7||a'(( 	0 	0A#0!<< 0 0 0MM$v,,///0  	= 	=ENN5!!!!..**++ve}}<<<<<	= 	=rX   zbroken on BSDzunreliable on APPVEYORc                    t          j                    |                                 }                                |vsJ t	          |d          5 }|                    d           |                                 t          fd                                           d D             }t          j	        
                    |          |v sJ t          rD ]}|j	        |k    r|j        dk    sJ d d d            n# 1 swxY w Y   D ]0}t          j	                            |j	                  s
J |            1d|z  }|                     t          d|g          t!          d          D ]:}d	                                 D             }||v r n8t#          j        d
           ;t          j	        
                    |          |v sJ |D ]+}t          j	                            |          s
J |            ,d S )Nr   s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc                  h    t                                                    t                     k    S r8   )r   
open_files)filesrL   s   rC   r  z-TestProcess.test_open_files.<locals>.<lambda>7  s"    s1<<>>22c%jj@ rX   c                 V    g | ]&}t           j                            |j                  'S r6  rG   r   rl  r  s     rC   r
  z/TestProcess.test_open_files.<locals>.<listcomp>9  s*    AAAa))!&11AAArX   r  zIimport time; f = open(r'%s', 'r'); [time.sleep(0.1) for x in range(100)];rn   r   c                 V    g | ]&}t           j                            |j                  'S r6  r  r  s     rC   r
  z/TestProcess.test_open_files.<locals>.<listcomp>J  s*    JJJa))!&11JJJrX   r   )r:   r;   r   r  r   r   flushr'   rG   r   rl  r   positionisfilerD   r"   r   r   sleep)	r?   r  r   	filenamesfiler  r   r  rL   s	          @@rC   test_open_fileszTestProcess.test_open_files+  sm    N""U""""&$ 	51GGK   GGIII@@@@@AAALLNNEAA5AAAI7##F++y8888 5! 5 5DyF**#}4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5  	3 	3D7>>$),,22d2222$% 	 z49::s 	9 	9AJJ1<<>>JJJI""Jt7##F++y8888 	. 	.D7>>$''------	. 	.s   B$DDDc                 R   t          j                    }t          j        j        }|                                 }t          |d          5 }|                                D ]C} ||j                   ||j                  k    s|j	        |
                                k    r n8D|                     dt          |                                          z             ||j                   ||j                  k    sJ t          r|j	        dk    sJ n|j	        |
                                k    sJ |                                d         }|d         |j        k    sJ |d         |j	        k    sJ |j        |                                vsJ 	 d d d            d S # 1 swxY w Y   d S )Nwzno file found; files=%sr   r   rq   )r:   r;   rG   r   rl  r   r   r  r   fdfilenor   reprr   )r?   rL   rl  r  fileobjr  ntuples          rC   test_open_files_2zTestProcess.test_open_files_2T  s   
 N7#""&# 	6' 	 	HTY''88GL+A+AAAw'.."2"222E 3 ii-allnn1E1EF   8DI&&((7<*@*@@@@@ 3w"}}}}}w'.."2"22222\\^^A&F!9++++!9	))))<q||~~55555+	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   	EFF #F c                 "   t          j                    }|                                 }|                                }t	          |d          }|                     |j                   |                                |dz   k    sJ t          j                    }|                     |j                   |                                |dz   k    sJ |                                 |                                 |                                |k    sJ d S )Nr  rq   r   )r:   r;   r   num_fdsr   r   closesocket)r?   rL   r  startr  socks         rC   test_num_fdszTestProcess.test_num_fdss  s    N""		FC  
###yy{{eai''''}
###yy{{eai''''



yy{{e######rX   z not reliable on OPENBSD & NETBSDc                 4   t          j                    }t          |                                          }t	          d          D ]@}t          j        d           t          |                                          }||k    r d S A|                     d          )Nr   g?z2num ctx switches still the same after 2 iterations)r:   r;   r8  num_ctx_switchesr   r   r  r   )r?   rL   beforer   afters        rC   test_num_ctx_switchesz!TestProcess.test_num_ctx_switches  s    
 NQ''))**q 	 	AJt**,,--Ev~~ iiLMMMrX   c                 *   t          j                    }t          t          d          r+|                                t          j                    k    sJ |                                 }|                                t          j                    k    sJ d S )Ngetppid)r:   r;   r  rG   ppidr  rD   rH   rK   s     rC   	test_ppidzTestProcess.test_ppid  sv    N2y!! 	,6688rz||++++vvxx29;;&&&&&&rX   c                    |                                  }|                                j        t          j                    k    sJ t          j                    d         }t          j        |                                          J d S r   )rD   parentr<   rG   rH   r:   pidsr;   )r?   rL   
lowest_pids      rC   test_parentzTestProcess.test_parent  sl    xxzz~,,,,[]]1%
~j))0022:::::rX   c                     t          j                    }|                                 \  }}|                                |k    sJ |                                |k    sJ d S r8   )r:   r;   r   r  r?   r  r   r   s       rC   test_parent_multizTestProcess.test_parent_multi  sa    !! 4466z  ""e++++||~~''''''rX   c                 F   t          j                    }|                                sJ |                                 \  }}|                                d         |k    sJ |                                d         |k    sJ |                                d         |k    sJ d S r   )r:   r;   parentsr   r#  s       rC   test_parentszTestProcess.test_parents  s     !!~~ 4466z}}q!V++++!!##A&%////!!##A&&000000rX   c                    t          j                    }|                                g k    sJ |                    d          g k    sJ |                     d          }|                                }|                    d          }||fD ]T}t	          |          dk    sJ |d         j        |j        k    sJ |d                                         |j        k    sJ Ud S )NT	recursiver   )creationflagsrq   )r:   r;   childrenrD   r   r<   r  )r?   r  r   	children1	children2r,  s         rC   test_childrenzTestProcess.test_children  s    !!  B&&&&.."4444 !!!22OO%%	OOdO33	"I. 	4 	4Hx==A%%%%A;?ei////A;##%%33333	4 	4rX   c                 T   t          j                    }|                                 \  }}|                                |gk    sJ |                    d          ||gk    sJ |                                 |                                 |                    d          g k    sJ d S )NTr)  )r:   r;   r   r,  rZ   rP   r#  s       rC   test_children_recursivez#TestProcess.test_children_recursive  s     !! 4466z  UG++++..5*2EEEEE 	

.."444444rX   c                 V   t          j        t                    }t          j                    D ]:}	 ||                                xx         dz  cc<   &# t          j        $ r Y 7w xY wt          |                                d           d         d         }t          r|dk    rt          j        d          t          j        |          }	 |                    d          }t          |          t          t          |                    k    sJ d S # t          j        $ r Y d S w xY w)	Nrq   c                     | d         S )Nrq   r6  )r   s    rC   r  z6TestProcess.test_children_duplicates.<locals>.<lambda>  s
    !A$ rX   )keyr   r   zPID 0Tr)  )collectionsdefaultdictrb  r:   process_iterr  Errorr  itemsr   r-   r   r;   r,  r   rY  rk   )r?   tablerL   r<   cs        rC   test_children_duplicatesz$TestProcess.test_children_duplicates  s2   ',,$&& 	 	Aaffhh1$<    U[[]]777;A> 	'SAXX+g&&&N3	)

T
**A q66SQ[[(((((( " 	 	 	DD	s#   "AA%$A%D D('D(c                 H   t          j                    }|                                 \  }}|                    d          }t	          |          dk    sJ |d         |k    sJ |d         |k    sJ |                                }|d         |k    sJ |d         |k    sJ d S )NTr)  r   r   rq   )r:   r;   r   r,  r   r&  )r?   r  r   r   r,  r&  s         rC   test_parents_and_childrenz%TestProcess.test_parents_and_children  s    !! 4466z??T?228}}!!!!{e####{j(((($$&&qzU""""qzV######rX   c                 Z   |                                  }|                                 t          d          D ]:}|                                t          j        k    r nt          j        d           ;|                                 |                                t          j        k    sJ d S )Nr   r   )	rD   r}   r   r  r:   STATUS_STOPPEDr   r  r~   )r?   rL   r   s      rC   test_suspend_resumezTestProcess.test_suspend_resume  s    			s 	 	AxxzzV222Jt	


xxzzV2222222rX   c                    t          j        t                    5  t          j        d           d d d            n# 1 swxY w Y   t          j        t
                    5  t          j        d           d d d            d S # 1 swxY w Y   d S )Nr  r   )r-   rI   r  r:   r;   r   r?   s    rC   test_invalid_pidzTestProcess.test_invalid_pid  s    ]9%% 	  	 N3	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 ]:&& 	 	N2	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   ;??BBBc                 V   t          j                    }|                    ddg          }t          |                                          ddgk    sJ t          j        t          t          j                                        }|                    dgd          }t          |d         t                    s|d         dk    sJ t          j
        ddt           j        	          5  |                    d
gd          d
dik    sJ 	 d d d            n# 1 swxY w Y   t          j
        ddt          j        |j        d          	          5  t          j        t           j                  5  |                    d
g           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j
        ddt          j        |j        d          	          5  |                    d
gd          d
dik    sJ 	 d d d            n# 1 swxY w Y   t          j
        ddt"          	          5  |                                }d
t          |                                          vsJ t          j        t"                    5  |                    d
g           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        t$                    5  |                    d           d d d            n# 1 swxY w Y   t          j        t&                    5  |                    dg           d d d            n# 1 swxY w Y   t          j        t&                    5  |                    ddg           d d d            d S # 1 swxY w Y   d S )Nr{  r   )attrsnet_connectionsfoo)rF  ad_valuezpsutil.Process.niceT)createre   r  rq   bar)r:   r;   as_dictr  keysr   r  r   r  r+   rf   rk   r=   r<   r-   rI   r  NotImplementedErrorr  r   )r?   rL   ds      rC   test_as_dictzTestProcess.test_as_dict  s   NIIUFOI,,affhhE6?2222N3v{}}--..II./%I@@!-.55 	1&'50000 Z!$F<O
 
 
 	H 	H 99F8a988VQKGGGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H Z!,QUF;;
 
 
 	* 	*
 v344 * *			)))* * * * * * * * * * * * * * *	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* Z!,QUF;;
 
 
 	P 	P
 99F8e9<<OOOOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P Z!$<O
 
 
 	* 	* 		Aaffhh////233 * *			)))* * * * * * * * * * * * * * *	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* ]9%% 	 	IIf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]:&& 	 	IIug	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]:&& 	& 	&IIuen%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   )!DDDF+0FF+F	F+F	F++F/2F/%!HHH:AKJ1%K1J5	5K8J5	9KKK,LLL2MMM9NN"%N"c                 
   t          j                    }t          j        d          5 }|                                5  |                                 |                                 d d d            n# 1 swxY w Y   |j        dk    sJ 	 d d d            n# 1 swxY w Y   t          j        d          5 }|                                 |                                 d d d            n# 1 swxY w Y   |j        dk    sJ d S )N$psutil._psplatform.Process.cpu_timesrq   r   r:   r;   r+   rf   oneshotr   
call_countr?   rL   r   s      rC   test_oneshotzTestProcess.test_oneshot/  s   NZ>?? 	%1                 <1$$$$$		% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% Z>?? 	1KKMMMKKMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 |q      sF   B)A2&B2A6	6B9A6	:BBB6)C++C/2C/c           	      $   t          j                    }t          j        d          5 }t          j        d          5 }|                                5  |                                 |                                 |                                5  |                                 |                                 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |j        dk    sJ |j        dk    sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        d          5 }|                                 |                                 d d d            n# 1 swxY w Y   |j        dk    sJ d S )NrR  z(psutil._psplatform.Process.oneshot_enterrq   r   rS  )r?   rL   m1m2r   s        rC   test_oneshot_twicezTestProcess.test_oneshot_twice<  s    NZ>?? 		*2FGG *2YY[[ & &KKMMMKKMMM & && & & & & & & & & & & & & & && & & & & & & & & & & & & & & }))))})))))* * * * * * * * * * * * * * *		* 		* 		* 		* 		* 		* 		* 		* 		* 		* 		* 		* 		* 		* 		* Z>?? 	1KKMMMKKMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 |q      s   D$D=C)C	8CCCCCDCD"C#DD$D	D$D	D$$D(+D()E88E<?E<c                    |                                  \  }}|                                }|                                }||k    sJ |                                5  |                                |k    sJ |                                |k    sJ 	 d d d            n# 1 swxY w Y   |                                5  |                                |k    sJ |                                |k    sJ 	 d d d            d S # 1 swxY w Y   d S r8   )r   r  rT  )r?   p1p2p1_ppidp2_ppids        rC   test_oneshot_cachezTestProcess.test_oneshot_cacheP  s    ))++B''))''))'!!!!ZZ\\ 	( 	(7799''''7799'''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( ZZ\\ 	( 	(7799''''7799'''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s$   5BB"%B"=5D  DDc                 ^     fd}                                                                                                    t          rt	          fd                                           t                    }|                    |j                  D ]\  }} |||           d S )Nc                     	  |             }t           r|dv rd S                     | d|d          # t          j        $ r  t          j        $ r Y d S t          j        $ r t          r|dv rY d S  w xY w)N)r{  r   z didn't raise NSP and returned z instead)r/  r'  )r   r   r:   r  r=   rk   r	   )funfun_namer  r?   s      rC   assert_raises_nspzFTestProcess.test_halfway_terminated_process.<locals>.assert_raises_nspg  s    cee  x?::FiiEHSS###N   '   '   &    x+EEEFFs   
5 A4A42A4c                  8     j         t          j                    vS r8   )r<   r:   r  rm  s   rC   r  z=TestProcess.test_halfway_terminated_process.<locals>.<lambda>~  s    quFKMM9 rX   )	rD   rZ   rP   r   r'   rT   r,   iterall)r?   rf  nsrd  r   rL   s   `    @rC   test_halfway_terminated_processz+TestProcess.test_halfway_terminated_process_  s    	 	 	 	 	& 		 	;9999:::q!!!q!! 	) 	)ICc4((((	) 	)rX   c                 ^    |                                  \  }}|                     |           d S r8   )spawn_zombieassertProcessZombie)r?   _parentzombies      rC   test_zombie_processzTestProcess.test_zombie_process  s1    ++--  (((((rX   c                     t          j                    }t          j        dt          j        d                    5 }|                                sJ |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Nzpsutil.Processr   rd   )r:   r;   r+   rf   r  rv  r   rV  s      rC   $test_zombie_process_is_running_w_excz0TestProcess.test_zombie_process_is_running_w_exc  s     NZ&*>q*A*A
 
 
 	<<>>!!!8OOOO		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s    A**A.1A.c                 
   t          j                    }t          j        dt          j        d                    5 }|                                t           j        k    sJ |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Nz!psutil._psplatform.Process.statusr   rd   )r:   r;   r+   rf   r  r  r  r   rV  s      rC    test_zombie_process_status_w_excz,TestProcess.test_zombie_process_status_w_exc  s     NZ/,Q//
 
 
 	 88::!555558OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   .A88A<?A<c                 4   t           rddlm} nddlm} |                                 }t	          j        |j                  }|j        |                                dz   f|_        t          t	          j
                               |j        t          j        v sJ |                                rJ t          j                            t          j        dd          5  t#           |                      5 }t          t	          j
                               d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d|j        z  |                                v sJ |j        t          j        vsJ |t	          j        |j                  k    sJ d}t'          |          }|                    |j        |j        z   d	          D ]u\  }}|                     |
          5  t1          j        t          j        |          5   |             d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   vdt7          |          v sJ dt9          |          v sJ t1          j        t          j        |          5  |                                 d d d            n# 1 swxY w Y   t1          j        t          j        |          5  |                                 d d d            n# 1 swxY w Y   t1          j        t          j        |          5  |                                 d d d            n# 1 swxY w Y   t1          j        t          j        |          5  |                                  d d d            d S # 1 swxY w Y   d S )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   iorw  r9   r:   r;   r<   r   _identr  r7  _pmaprv  r+   rf   object_commonr   getvaluer,   rh  setterskillersr  r-   rI   r=   r  r	  r  r  r&  r,  )	r?   rw  subprL   r   msgrj  rd  r   s	            rC   test_reused_pidzTestProcess.test_reused_pid  sD    	*#######))))))""$$N48$$E1==??S01V ""###u$$$$<<>>!!! Zv~~tDD 	, 	, ,, ,V(**+++, , , , , , , , , , , , , , ,	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, <aeCzz||    uFL((((FN48,,,,,,Dq!!bj!8eLL 	 	IC4((  ]6#7sCCC  CEEE                             )CFF2222(DGG3333]6/s;;; 	 	FFHHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]6/s;;; 	 	HHJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]6/s;;; 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]6/s;;; 	 	JJLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   D73!D D7 D$	$D7'D$	(D77D;>D;&!H5HH5H""H5%H"&H55H9	<H9	J((J,/J,K44K8;K8M  MM+NNNc                 x   dt          j                    vrt          j        t           j                  5  t          j        d           d d d            n# 1 swxY w Y   t          j        d          rJ t          j        d                                          dk    sJ d S t          j        d          }t          rt           j	        nt          }t          j        |          5  |                                 d d d            n# 1 swxY w Y   t          j        |          5  |                                 d d d            n# 1 swxY w Y   t          j        |          5  |                                 d d d            n# 1 swxY w Y   t          j        |          5  |                                 d d d            n# 1 swxY w Y   t          j        |          5  |                                 d d d            n# 1 swxY w Y   t          j        |          5  |                    t"          j                   d d d            n# 1 swxY w Y   t'          |          }|                    |j        |j        z             D ]u\  }}	  |            }|dv r|j        dk    sJ "|dk    r&t          rdnd}|                                |k    sJ N|dk    r|s
J |            a# t           j	        $ r Y rw xY wt2          s-dt          j                    v sJ t          j        d          sJ d S d S )Nr   rq   )r  r  r  zNT AUTHORITY\SYSTEMrootr   )r:   r  r-   rI   r=   r;   
pid_existsr  r   rk   r   rP   rZ   r}   r~   rO   r]   rQ   rR   r,   rh  gettersr  r  r  r	   )r?   rL   r  rj  rd  r   r  r   s           rC   
test_pid_0zTestProcess.test_pid_0  s   FKMM!!v344 " "q!!!" " " " " " " " " " " " " " " (+++++>!$$))++q0000FN1%,<f!!*]3 	 	FFHHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]3 	 	KKMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]3 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]3 	 	HHJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]3 	 	FFHHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]3 	* 	*MM&.)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* q!!bj!899 	& 	&IC&cee +++8q=====Z''5<H11&D::<<4/////V^^%%%%% &     	(%%%%$Q'''''	( 	(''s   AAA&DDD&EEE&FFF&GGG&HHH& III
K//L Lc                     d }d | _         t          j                    } ||                                          } |t          j                                                  }t          st          r
||k    sJ d S d S d S )Nc                     g d}t           r|                    g d           |D ]}|                     |d            t          d |                                 D                       S )N)PLATHOMEPYTEST_CURRENT_TESTPYTEST_VERSION)__CF_USER_TEXT_ENCODINGVERSIONER_PYTHON_PREFER_32_BITVERSIONER_PYTHON_VERSIONr  c                     g | ]Y\  }}|                     d d                               dd          |                     d d                               dd          fZS )rc   
)r~  )r	  kvs      rC   r
  z@TestProcess.test_environ.<locals>.clean_dict.<locals>.<listcomp>
  sr       
 Aq IIdB''//b99IIdB''//b99  rX   )r   r  popdictr9  )rO  excluder   s      rC   
clean_dictz,TestProcess.test_environ.<locals>.clean_dict  s    OOOG             " "dD!!!!  
 GGII     rX   )maxDiffr:   r;   r  rG   copyr
   r   )r?   r  rL   d1d2s        rC   test_environzTestProcess.test_environ  s    	 	 	& NZ		$$Z
))** 	~ 	8888	 	 	 	8rX   z<macOS 11+ can't get another process environment, issue #2084z(sometimes fails on `assert is_running()`c                    t          j        d          }t          |                                 |          }|                     |gt
          j        t
          j                  }t          j        |j	                  }t          |j	                   |                                sJ |j                                        dk    sJ t          r3t          r,	 |                                }n*# t          j        $ r Y d S w xY w|                                }|dddk    sJ |                                 |j        dk    sJ d S )	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)stdinrp   rX   r  3)ACr   )textwrapdedentr)   r   r9   rs   rt   r:   r;   r<   r4   rv  rp   r   r   r   r  rk   communicate
returncode)r?   rV   cexerB   rL   envs         rC   test_weird_environzTestProcess.test_weird_environ  sS         DOO--d;;;##F*/*/ $ 
 
 N59%%QU||~~|  ""c)))) 	Z 	iikk&    
 ))++CCc******1$$$$$$s   C+ +C>=C>N)m__name__
__module____qualname____doc__rD   rM   rW   r[   r_   r-   markskipifr   rl   rv   r   r   r   r   r   r   r   r$   r   r   r   r   r   r   r   r3   r   r   r   r   r   r  r   r  r  r  r"  r$  r*  r-  r   r3  r0   r2   r   r9  rI  rQ  r   ri  rq  rt  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  r<  r>  rA  rD  rP  rW  r[  ra  rk  rq  rs  ru  r  r  r   r  r    r  r6  rX   rC   r6   r6   P   s       ))    " " "" " "	" 	" 	" [E	+66# # 76# " " "6 ['899. . :9.2/ / /.  " " "(	' 	' 	'   [	*CDD
L 
L ED
L [	*CDDN N EDN [,,_EE8 8 FE8L L L$ [E	,77	' 	' 87	' [00IIU+++' ' ,+ JI'R [J??[E	,77) ) 87 @?)V [J??[?   - -  @?-4 [J??$ $ @?$. [J??
6 
6 @?
6 [J??A A @?A$ [J??A A @?A [J??	4 	4 @?	4& & &" [GN;;# # <;#
 [K@@5 5 A@5& 5)))[K@@
 
 A@ *) 
& + + +<! ! !  [O+ODD-- -- ED--^ [O+ODD	. 	. ED	., , ," " " [	*CDD  ED6> > >< [%566" " 76".5 5 5 [)	2FGG[	*CDD7 7 ED HG76 [&788[O44[%566[	*?@@D D A@ 76 54 98D [E	,77. . 87. [E	,77. . 87.@ @ @D [	*CDD3 3 ED31 1 1"& & &
D 
D 
D [,,_EE$( $( FE$(L [,,_EE
$ 
$ FE
$ [,,_EE= = FE=( [O44[)ABB#. #. CB 54#.L [O44[)ABB6 6 CB 5468 [E	,77$ $ 87$ U+++[6"D   N N  ,+N' ' '; ; ;( ( ( [	*CDD1 1  ED14 4 45 5 5) ) )($ $ $3 3 3  2& 2& 2&h! ! !! ! !(( ( ($) $) $)L [E	,77) ) 87) [E	,77  87 [E	,77	 	 87	, , ,\,( ,( ,(\ [K@@  A@6 [K@@[E	,77[M    [A   %% %% 	  87 A@%% %% %%rX   r6   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                            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 | d t          |           D             D ];}t          | |          fd}t	          | |t          j        ||                      <d S )Nc                 <    g | ]}|                     d           |S )testr  r  s     rC   r
  z0LimitedUserTestCase.__init__.<locals>.<listcomp>`  s)    FFFqf1E1EFFFFrX   c                 J    	               d S # t           j        $ r Y d S w xY wr8   )r:   rk   )r?   meths    rC   test_z+LimitedUserTestCase.__init__.<locals>.test_c  s<    !.   s   
 "")r   __init__r  r   setattrtypes
MethodType)r?   r@   rA   attrr  r  	__class__s        @rC   r  zLimitedUserTestCase.__init__\  s    EGGd-f--- GFCIIFFF 	C 	CtT**     dE$4UD$A$ABBBB	C 	CrX   c                     t                                                       t          j        d           t          j        d           d S )Ni  )r   setUprG   setegidseteuidr?   r  s    rC   r  zLimitedUserTestCase.setUpk  s:    GGMMOOOJtJtrX   c                     t          j        | j                   t          j        | j                   t                                                       d S r8   )rG   r  PROCESS_UIDr  PROCESS_GIDr   tearDownr  s    rC   r  zLimitedUserTestCase.tearDownp  sE    Jt'(((Jt'(((GGrX   c                     	 t          j                                        d           |                     d          # t           j        $ r Y d S w xY w)Nr   zexception not raised)r:   r;   r  r   rk   rC  s    rC   r  zLimitedUserTestCase.test_niceu  s_    8  %%b))) ii 6777 &   s   &= AATzcauses problem as rootr`   c                     d S r8   r6  rC  s    rC   rq  z'LimitedUserTestCase.test_zombie_process}  s    DrX   )r  r  r  r  r  rG   r  r  r  r  r  r  r  r  r-   r  r  rq  __classcell__)r  s   @rC   r  r  Q  s        	 	 72x   	&#")++K#")++K	C 	C 	C 	C 	C	 	 	 	 	
	 	 	 	 	
	8 	8 	8 
		D)A		B	B	 	 
C	B	 	 	 	 	rX   r  c                   :    e Zd ZdZed             Zd Zd Zd ZdS )	TestPopenzTests for psutil.Popen class.c                 "    t                       d S r8   r.   )clss    rC   tearDownClasszTestPopen.tearDownClass  s    rX   c                 l   t           ddg}t          j        |t          j        t          j        t
                    5 }|                                 |                                 |j         t          |          sJ t          j        t                    5  |j         d d d            n# 1 swxY w Y   |                                 d d d            n# 1 swxY w Y   t          r(|                    d          t"          j         k    sJ d S |                    d          t"          j        k    sJ d S )Nrn   3import time; [time.sleep(0.1) for x in range(100)];stdoutrp   r  rr   )r"   r:   Popenrs   rt   r#   r   r   r  r  r-   rI   rJ   rH  rZ   r   rP   rQ   rR   r?   ru   procs      rC   	test_misczTestPopen.test_misc  s   
 A

 \??	
 
 
 	
 IIKKKNNJJt99~..                NN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  	299Q<<FN?22222299Q<<6>111111s6   ACB*C*B.	.C1B.	2CCCc                 R   t          j        t          dgt          j        t          j        t          j        t
                    5 }|                                 d d d            n# 1 swxY w Y   |j        j        sJ |j	        j        sJ |j
        j        sJ |j        dk    sJ d S )Nz-V)r  rp   r  r  r   )r:   r  r"   rs   rt   r#   r  r  closedrp   r  r  )r?   r  s     rC   test_ctx_managerzTestPopen.test_ctx_manager  s    \??/
 
 
 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 {!!!!{!!!!z    !######s   A%%A),A)c                 2   t           ddg}t          j        |t          j        t          j        t
                    5 }|                                 |                                 t          j	        t          j
                  5  |                                 d d d            n# 1 swxY w Y   t          j	        t          j
                  5  |                                 d d d            n# 1 swxY w Y   t          j	        t          j
                  5  |                    t          j                   d d d            n# 1 swxY w Y   t          rt          j	        t          j
                  5  |                    t          j                   d d d            n# 1 swxY w Y   t          j	        t          j
                  5  |                    t          j                   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nrn   r  r  )r"   r:   r  rs   rt   r#   rZ   rP   r-   rI   r=   rO   r]   rQ   rR   r   CTRL_C_EVENTCTRL_BREAK_EVENTr  s      rC   test_kill_terminatezTestPopen.test_kill_terminate  s/   
 A

 \??	
 
 
 	>
 NNIIKKKv344 ! !   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !v344  		              v344 1 1  0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 >]6#788 : :$$V%8999: : : : : : : : : : : : : : :]6#788 > >$$V%<===> > > > > > > > > > > > > > >#	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   AHB$H$B(	(H+B(	,!HC."H.C2	2H5C2	6!H E7HE	H
E	(H3 FHF#	#H&F#	'!H G4(H4G8	8H;G8	<HHHN)	r  r  r  r  classmethodr  r  r  r  r6  rX   rC   r  r    s`        ''  [2 2 26$ $ $> > > > >rX   r  )Gr  r5  rh   r  r  rG   rQ   r  r_  r  rs   r|  r  r   r  r:   r   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/   r0   r1   r2   r3   r4   r6   r  r  r  r6  rX   rC   <module>r     s   & %           				         



                                                                 $ $ $ $ $ $       , , , , , ,       * * * * * *             ! ! ! ! ! ! # # # # # # ' ' ' ' ' ' ' ' ' ' ' ' ) ) ) ) ) ) $ $ $ $ $ $ # # # # # # ( ( ( ( ( ( ) ) ) ) ) ) - - - - - - # # # # # # $ $ $ $ $ $ % % % % % %       # # # # # # ' ' ' ' ' ' " " " " " " ' ' ' ' ' ' # # # # # # # # # # # # , , , , , , % % % % % % & & & & & &       * * * * * *       & & & & & & ) ) ) ) ) )       . . . . . . 0 0 0 0 0 0 % % % % % %w% w% w% w% w%. w% w% w%~/ 	 0YRY[[A. . . . .k . . .lK> K> K> K> K> K> K> K> K> K>rX   