HEX
Server: LiteSpeed
System: Linux atali.colombiahosting.com.co 5.14.0-570.12.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Tue May 13 06:11:55 EDT 2025 x86_64
User: coopserp (1713)
PHP: 8.2.29
Disabled: dl,exec,passthru,proc_open,proc_close,shell_exec,memory_limit,system,popen,curl_multi_exec,show_source,symlink,link,leak,listen,diskfreespace,tmpfile,ignore_user_abord,highlight_file,source,show_source,fpaththru,virtual,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix,posix_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setid,posix_times,posix_ttyname,posix_uname,proc_get_status,proc_nice,proc_terminate
Upload Files
File: //usr/local/lib64/python3.9/site-packages/psutil/tests/__pycache__/test_process.cpython-39.pyc
a

��?hn��@sdZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlmZddlmZddlmZddlmZddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZddlmZddlmZddlmZddlm Z ddlm!Z!ddl"m#Z#ddl"m$Z$ddl"m%Z%ddl"m&Z&ddl"m'Z'ddl"m(Z(ddl"m)Z)ddl"m*Z*ddl"m+Z+ddl"m,Z,ddl"m-Z-ddl"m.Z.ddl"m/Z/dd l"m0Z0dd!l"m1Z1dd"l"m2Z2dd#l"m3Z3dd$l"m4Z4dd%l"m5Z5dd&l"m6Z6dd'l"m7Z7dd(l"m8Z8dd)l"m9Z9dd*l"m:Z:dd+l"m;Z;dd,l"m<Z<dd-l"m=Z=dd.l"m>Z>dd/l"m?Z?dd0l"m@Z@dd1l"mAZAdd2l"mBZBGd3d4�d4e4�ZCe�r�e�D�dk�r�Gd5d6�d6eC�ZEGd7d8�d8e4�ZFdS)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@seZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Ze	j
jedd
�dd��Z
dd�Ze	j
jedd
�dd��Zdd�Zdd�Zdd�Zdd�Zdd�Ze	j
jedd
�d d!��Ze	j
jedd
�d"d#��Ze	j
jed$d
�d%d&��Zd'd(�Ze	j
jed)d
�d*d+��Ze	j
jed$d
�eed,�d-d.���Z e	j
je!d$d
�e	j
jed/d
�d0d1���Z"e	j
je!d$d
�e	j
je#d2d
�d3d4���Z$e	j
je%d$d
�d5d6��Z&e	j
je%d$d
�d7d8��Z'e	j
je%d$d
�d9d:��Z(e	j
je%d$d
�d;d<��Z)e	j
je%d$d
�d=d>��Z*d?d@�Z+e	j
je#dAd
�dBdC��Z,e	j
je-d$d
�dDdE��Z.e/�e0e1d,�e	j
je-d$d
�dFdG����Z2e/�dHdI��Z3dJdK�Z4e	j
je5d$d
�dLdM��Z6e	j
je5d$d
�dNdO��Z7dPdQ�Z8dRdS�Z9e	j
jedd
�dTdU��Z:dVdW�Z;e	j
je<dXd
�dYdZ��Z=d[d\�Z>e	j
je<�ped]d
�e	j
jed^d
�d_d`���Z?e	j
je@dad
�e	j
jeAdbd
�e	j
je<dXd
�e	j
jedcd
�ddde�����ZBe	j
jed)d
�dfdg��ZCe	j
jed)d
�dhdi��ZDdjdk�ZEe	j
jedd
�dldm��ZFdndo�ZGdpdq�ZHdrds�ZIe	j
jeJd$d
�dtdu��ZKe	j
jeJd$d
�dvdw��ZLe	j
jeJd$d
�dxdy��ZMe	j
jeNdzd
�e	j
jeOd{d
�d|d}���ZPe	j
jeNdzd
�e	j
jeOd{d
�d~d���ZQe	j
jed)d
�d�d���ZReed,�e	j
jeS�p�ed�d
�d�d����ZTd�d��ZUd�d��ZVd�d��ZWe	j
jedd
�e/�d�d����ZXd�d��ZYd�d��ZZd�d��Z[d�d��Z\d�d��Z]d�d��Z^d�d��Z_d�d��Z`d�d��Zad�d��Zbd�d��Zce	j
jed)d
�d�d���Zde	j
jed)d
�d�d���Zee	j
jed)d
�d�d���Zfd�d��Zgd�d��Zhe	j
jeid$d
�d�d���Zje	j
jeid$d
�e	j
jed)d
�e	j
jekd�d
�e	j
jed�d
�d�d������Zld�S)��TestProcessrcOsF|j|i|��}zt�|j�WStjy@|�|j��Yn0dS�N)�spawn_testproc�psutil�Process�pid�
NoSuchProcessZ
assertPidGone)�self�args�kwargs�sproc�r?�E/usr/local/lib64/python3.9/site-packages/psutil/tests/test_process.py�spawn_psprocSszTestProcess.spawn_psproccCsNt��}|jt��ksJ�t�t��d|_Wd�n1s@0YdS)N�!)r7r8r9�os�getpidr,�raises�AttributeError�r;�pr?r?r@�test_pid]szTestProcess.test_pidcCsJ|��}|��|��}tr,|tjks<J�n|tjks<J�|�|�dSr5)rA�kill�waitr�signal�SIGTERM�SIGKILL�assertProcessGone�r;rH�coder?r?r@�	test_killcszTestProcess.test_killcCsJ|��}|��|��}tr,|tjks<J�n|tjks<J�|�|�dSr5)rA�	terminaterKrrLrMrOrPr?r?r@�test_terminatemszTestProcess.test_terminatecCsXtr
tjntj}|��}|�|�|��}tr<||ksJJ�n||ksJJ�|�|�dSr5)	r
rLrNrMrA�send_signalrKrrO)r;�sigrHrQr?r?r@�test_send_signalws
zTestProcess.test_send_signalz	not POSIX��reasonc	Cs�tj}|��}tjdttjd�d��Ft�	t
j��|�|�Wd�n1sR0YWd�n1sp0Y|��}tjdttj
d�d��Ft�	t
j��|�|�Wd�n1s�0YWd�n1s�0YdS)Nzpsutil.os.kill���side_effect)rLrMrAr*�patch�OSError�errnoZESRCHr,rEr7r:rU�EPERM�AccessDenied)r;rVrHr?r?r@�test_send_signal_mocked�s�F�z#TestProcess.test_send_signal_mockedcCs�tddg}|�|�}|��}|dks(J�|�|�tddg}|j|tjd�}|��}|dks`J�|�|�tddg}|�|�}|��}|dks�J�|�|�tdd	g}|�|�}|��}|dks�J�|�|�dS)
N�-c�passrz1 / 0)�stderr�zimport sys; sys.exit(5);�zimport os; os._exit(5);)r!rArKrO�
subprocess�PIPE)r;�cmdrHrQr?r?r@�test_wait_exited�s(









zTestProcess.test_wait_exitedzfails on NETBSDcCs�|��}tr�|�tj�t�tj��|j	dd�Wd�n1sF0Y|�tj
�t�tj��|j	dd�Wd�n1s�0Y|�tj�|�	�tjks�J�|�	�tjks�J�n�|��t�tj��|j	dd�Wd�n1�s0Y|�
�t�tj��|j	dd�Wd�n1�sD0Y|��|�	�tjk�sjJ�|�	�tjk�s~J�dS)N���MbP?)�timeout)rAr
rUrL�SIGSTOPr,rEr7�TimeoutExpiredrK�SIGCONTrM�suspend�resumerSrGr?r?r@�test_wait_stopped�s(**,,zTestProcess.test_wait_stoppedcCs�|��\}}t�tj��|�d�Wd�n1s80Yt�tj��|�d�Wd�n1sn0Y|��|��|��}|��}tr�|tj	ks�J�|dus�J�n|tj	ks�J�|tj	ks�J�dS)N�{�G�z�?)
�spawn_children_pairr,rEr7rorKrSr
rLrM)r;�child�
grandchildZ	child_retZgrandchild_retr?r?r@�test_wait_non_children�s((z"TestProcess.test_wait_non_childrencCs�|��}|��t�tj��|�d�Wd�n1s<0Yt�tj��|�d�Wd�n1sr0Yt�t��|�d�Wd�n1s�0YdS)Nrtr���)rA�namer,rEr7rorK�
ValueErrorrGr?r?r@�test_wait_timeout�s((zTestProcess.test_wait_timeoutcCs�|��}t�tj��|�d�Wd�n1s40Y|��t��t}t��|kr�z|�d�}Wq�WqRtjy�YqR0qR|�	d��t
r�|tjks�J�n|tj
ks�J�|�|�dS)Nrrm)rAr,rEr7rorKrJ�timer�failr
rLrNrMrO)r;rHZstop_atrQr?r?r@�test_wait_timeout_nonblocking�s (

z)TestProcess.test_wait_timeout_nonblockingcCs�t��}|jdd�|jdd�td�D]*}|jdd�}t|t�sFJ�|dks(J�q(t�t��|jdd�Wd�n1s�0YdS)Nrl)�interval�d�ry)	r7r8�cpu_percent�range�
isinstance�floatr,rEr{)r;rH�_�percentr?r?r@�test_cpu_percent�szTestProcess.test_cpu_percentcCsHtjddd��&}t����|js&J�Wd�n1s:0YdS)Nzpsutil.cpu_count)Zreturn_value)r*r]r7r8r��called)r;�mr?r?r@�test_cpu_percent_numcpus_nonesz)TestProcess.test_cpu_percent_numcpus_nonezQEMU user not supportedc	Cs�t����}|jdksJ|��|jdks0J|��|jdksBJ|��|jdksTJ|��trj|jdksjJ|��|j	D]}t
�dt
�t
||���qpdS)Nr�z%H:%M:%S)r7r8�	cpu_times�user�system�
children_user�children_systemrZiowait�_fieldsr}�strftime�	localtime�getattr)r;�timesrzr?r?r@�test_cpu_timess
zTestProcess.test_cpu_timescCs�t����dd�\}}t��dd�\}}t||g�t||g�dkrZ|�d||f��t||g�t||g�dkr�|�d||f��dS)N�皙�����?zexpected: %s, found: %s)r7r8r�rCr��max�minr~)r;�	user_timeZkernel_time�utimeZktimer?r?r@�test_cpu_times_2szTestProcess.test_cpu_times_2z
not supportedcCsPt��}|��}|dksJ�t��dkr4|dks4J�|��tt���vsLJ�dS�Nrrf)r7r8Zcpu_num�	cpu_countr�)r;rH�numr?r?r@�test_cpu_num)szTestProcess.test_cpu_numcCsZ|��}t��}|��}t||�}|dkr@|�d|||f��t�dt�|����dS)Nr�z'expected: %s, found: %s, difference: %sz%Y %m %d %H:%M:%S)rAr}�create_time�absr~r�r�)r;rH�nowr��
differencer?r?r@�test_create_time2s��zTestProcess.test_create_timez
POSIX onlycCsVt����}|durRztj�td��}WntyDt�	d��Yn0||ksRJ�dS)N�ttyzcan't rely on `tty` CLI)
r7r8�terminalrC�path�realpathr0�RuntimeErrorr,�skip)r;r�r�r?r?r@�
test_terminalDszTestProcess.test_terminal)Zonly_ifcCs�t��}|��}ttd��}|��Wd�n1s80Y|��}ts�ts�|j|jksbJ�|j	|j	ksrJ�t
r�|j|jks�J�|j|jks�J�n |j
|j
ks�J�|j|jks�J�|��}t|��d��8}tr�|�tddd��n|�dd�Wd�n1�s0Y|��}|j	|j	k�s2J�|j|jk�sDJ�|j|jk�sVJ�|j
|j
k�shJ�t
�r�|j|jk�s�J�|j|jk�s�J�tt|��D]>}t�r�|dk�r��q�||dk�s�J�||dk�s�J��q�dS)N�rb�wb�xi@B�asciir�r)r7r8Zio_counters�openr!�readrrZ
read_countZwrite_countrZ
read_charsZwrite_chars�
read_bytes�write_bytes�
get_testfnr�write�bytesr��len)r;rHZio1�fZio2�ir?r?r@�test_io_countersPs>&.zTestProcess.test_io_countersz
linux onlycsR�fdd�}t���ts.���dtjks.J�tjdks<J�tjdksJJ�tjdksXJ�tjdksfJ����}|�||���tj�t	����tjdfks�J�t
�t�� �jtjdd�Wd�n1s�0Y��tj�t	����tjdfk�sJ��jtjdd�t	����tjdfk�s.J�t
�t�� �jtjd	d�Wd�n1�s`0Yz�jtjdd�Wntj
�y�Yn0t
jtd
d����tjd�Wd�n1�s�0Yt
jtd
d����tjd�Wd�n1�s0Yt
jtdd���jdd�Wd�n1�sD0YdS)
Ncs&|\}}|tjkrd}��||�dS�Nr)r7�IOPRIO_CLASS_NONE�ionice)�initZioclass�value�rHr?r@�cleanup~s
z.TestProcess.test_ionice_linux.<locals>.cleanuprrfr����r��zioclass accepts no value��matchz$'ioclass' argument must be specified)r7r8rr�r�ZIOPRIO_CLASS_RTZIOPRIO_CLASS_BEZIOPRIO_CLASS_IDLE�
addCleanup�tupler,rEr{ra)r;r�r�r?r�r@�test_ionice_linux{s@.0..�zTestProcess.test_ionice_linuxz!not supported on this win versioncCs*t��}ts|��tjksJ�|��}|�|j|�|�tj�|��tjksRJ�|�tj�|��tjkspJ�z|�tj�Wntj	y�Yn0|��tjks�J�t
jtdd�� |jtjdd�Wd�n1s�0Yt
jt
dd�� |�tjd�Wd�n1�s0YdS)Nz&value argument not accepted on Windowsr�rfr�zis not a valid priority)r7r8rr�Z
IOPRIO_NORMALr�ZIOPRIO_VERYLOWZ
IOPRIO_LOWZIOPRIO_HIGHrar,rE�	TypeErrorr{)r;rHr�r?r?r@�test_ionice_win�s(�.zTestProcess.test_ionice_wincCs�ddl}t�t���}dd�tt�D�}|s4J|��|D]�}tt|�}|dksRJ�|t|�vr�|t||�kspJ�trvq8|�|�|�	|�ks�J�q8|�|�}t
|�dks�J�|ddks�J�|ddks8J�q8dS)NrcSsg|]}|�d�r|�qS)ZRLIMIT��
startswith��.0r�r?r?r@�
<listcomp>��z/TestProcess.test_rlimit_get.<locals>.<listcomp>r�ryrf)�resourcer7r8rCrD�dirr�r �rlimitZ	getrlimitr�)r;r�rH�namesrzr��retr?r?r@�test_rlimit_get�s 

zTestProcess.test_rlimit_getcCs�|��}|�tjd�|�tj�dks*J�trntjtdd��"tj�	d��d�Wd�n1sd0Yt�t��|�tjd�Wd�n1s�0YdS)N)rgrgzcan't use prlimitr�r)rgrgrg)
rAr�r7Z
RLIMIT_NOFILErr,rEr{Z_psplatformr8rGr?r?r@�test_rlimit_set�s0zTestProcess.test_rlimit_setcCsHt��}|��}|�tj�\}}z�|�tjd|f�t|d��}|�d�Wd�n1s^0Yt�t	��D}t|d��}|�d�Wd�n1s�0YWd�n1s�0Yt
r�|jjn|jdtj
ks�J�W|�tj||f�|�tj�||fk�sDJ�n.|�tj||f�|�tj�||fk�sBJ�0dS)N�r�sXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXsXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr)r7r8r�r��RLIMIT_FSIZEr�r�r,rE�IOErrorrr�r_ZEFBIG)r;rH�testfn�soft�hardr��excr?r?r@�test_rlimit�s(F"�zTestProcess.test_rlimitcCs�t��}|�tj�\}}z�|�tjd|f�|�tjtj|f�t|��d��}|�d�Wd�n1sn0YW|�tj||f�|�tj�||fks�J�n,|�tj||f�|�tj�||fks�J�0dS)Nr�r�sXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)r7r8r�r��
RLIM_INFINITYr�r�r�)r;rHr�r�r�r?r?r@�test_rlimit_infinity�s*�z TestProcess.test_rlimit_infinitycCs<t��}|�tj�\}}|tjks&J�|�tj||f�dSr5)r7r8r�r�r�)r;rHr�r�r?r?r@�test_rlimit_infinity_value
sz&TestProcess.test_rlimit_infinity_valuecCs�t��}tr:z|��}WqBtjy6t�d��YqB0n|��}t��(|��}||dksbJ�Wd�n1sv0YdS)N�$on OpenBSD this requires root accessrf)r7r8r�num_threadsrar,r�r%)r;rH�step1�step2r?r?r@�test_num_threadsszTestProcess.test_num_threadszWINDOWS onlycCst��}|��dksJ�dSr�)r7r8Znum_handlesrGr?r?r@�test_num_handles*szTestProcess.test_num_handlescCs�t��}tr:z|��}WqBtjy6t�d��YqB0n|��}t��n|��}t|�t|�dksjJ�|d}|j	|dks�J�|j
|dks�J�|j|dks�J�Wd�n1s�0YdS)Nr�rfrr�)r7r8r�threadsrar,r�r%r��idr��system_time)r;rHr�r�Zathreadr?r?r@�test_threads0szTestProcess.test_threadscCs�|��}tr8z|��Wntjy6t�d��Yn0t|��j	t
dd�|��D���dksdJ�t|��jt
dd�|��D���dks�J�dS)Nr�cSsg|]
}|j�qSr?)r�r�r?r?r@r�Or�z.TestProcess.test_threads_2.<locals>.<listcomp>r�cSsg|]
}|j�qSr?)r�r�r?r?r@r�Ur�)rArr�r7rar,r�r�r�r��sumr�rGr?r?r@�test_threads_2Ds$"������zTestProcess.test_threads_2cCs�t��}|��dd�\}}|��}|dks0J�|dks<J�dgd}|��dd�\}}|��}||ksnJ�||kszJ�||ks�J�~tr�|��}	|	j|	jks�J�|	j|	jks�J�|��}	|	j	D]}
t
|	|
�dks�J�q�dS)Nr�ri`�)r7r8Zmemory_info�memory_percentrZrssZwset�vmsZpagefiler�r�)r;rHZrss1Zvms1Zpercent1ZmemarrZrss2Zvms2Zpercent2�memrzr?r?r@�test_memory_infoZs&

zTestProcess.test_memory_infocCs�t��}t��j}|��}|jD]8}t||�}|dks:J�|dkrFts trLq ||ks J�q tsft	sft
rt|jdkstJ�tr�|jdks�J�|j
dks�J�dS)Nrr�)r7r8Zvirtual_memory�totalZmemory_full_infor�r�r	rrr�ussZpssZswap)r;rHr�r�rzr�r?r?r@�test_memory_full_infoys


z!TestProcess.test_memory_full_infoc
Cs�t��}|��}t|�tt|��ks(J�|jdd�}|D�]}|j�d�s8trZd|jvrZq8tj�	|j�srJ|j��t
�rz*tj�|j�s�tj�|j�s�J|j��WnZt
y�ts��n@td��}|��}Wd�n1s�0Yd|j|vr��Yn0q8dtj�|j�vr8zt�|j�}Wnt�y6Yq80t�|j�s8J|j��q8|D]l}|jD]^}t||�}	|dk�rz�q^|d	v�r�|	�s�J|	��n&t|	ttf��s�J�|	d
k�s^J|	���q^�qTdS)NF)Zgrouped�[z
/bin/qemu-z/proc/self/smapsz%s (deleted)Z64r�)�addrZpermsr)r7r8�memory_mapsr��setr�r�r#rC�isabsr
�exists�islink�AssertionErrorrr
r��basename�statr�S_ISREG�st_moder�r�r��intr)
r;rH�mapsZext_maps�ntr��data�st�fnamer�r?r?r@�test_memory_maps�sL
��
&




zTestProcess.test_memory_mapscs`t��}t��>}dd���fdd�|��D�}�|�|vs>J�Wd�n1sR0YdS)NcSstj�tj�|��Sr5)rCr�r��normcaser�r?r?r@�normpath�sz8TestProcess.test_memory_maps_lists_lib.<locals>.normpathcsg|]}�|j��qSr?)r�r��rr?r@r��r�z:TestProcess.test_memory_maps_lists_lib.<locals>.<listcomp>)r7r8r'r�)r;rHr�Zlibpathsr?rr@�test_memory_maps_lists_lib�s
z&TestProcess.test_memory_maps_lists_libcCsbt��}|��t�t��|jdd�Wd�n1s<0YtsRtsRtr^|jdd�dS)Nz?!?)Zmemtyper�)	r7r8r�r,rEr{rrrrGr?r?r@�test_memory_percent�s*zTestProcess.test_memory_percentcCsL|��}|��sJ�|��s J�|��|��|��r<J�|��rHJ�dSr5)rA�
is_runningrJrKrGr?r?r@�test_is_running�szTestProcess.test_is_runningcCs�|��}|��}z|tksJ�Wn�ty�tr`t|�tt�kr`tjj}||�|t�ks�J�nLdt	j
dt	j
df}z |�|d�t�|d�ks�J�Wnty�Yn0Yn0t|ddg�}|dks�J�dS)Nz%s.%srrfrZrczimport os; print('hey')Zhey)
rA�exer!rrr�rCr�r�sys�version_info�replacer0)r;rHrr�ver�outr?r?r@�test_exe�s zTestProcess.test_execCs�tddg}|�|�}tr.|��gkr.t�d��ts:ts:trP|��dtks�J�n�tr�t	r�|��d}|tkr�d�
|��dd��d�
|dd��ks�J�dStr�d�
|��dd��d�
|�ks�J�dSd�
|���d�
|�ks�J�dS)Nrc�2import time; [time.sleep(0.1) for x in range(100)]�OPENBSD: returned EBUSYr� rfr�)r!rAr�cmdliner,r�rrrr�joinr#)r;rrH�pyexer?r?r@�test_cmdline�s$�

,$zTestProcess.test_cmdlinezbroken on PYPYcCs�tg}|�dgd�|�ddg�|�|�}trhz|��|ksDJ�Wq�tjydt�d��Yq�0nHt	r�|��dd�|ks�J�n*|��}t
r�|gkr�t�d��||ks�J�dS)Nz-v�2rcrz#OPENBSD: process turned into zombier�r)r!�extendrArrr7�
ZombieProcessr,r�r#r)r;rrHr�r?r?r@�test_long_cmdlines"�

zTestProcess.test_long_cmdlinecCsH|��}|����}tj�tj�tj����}|�	|�sDJ||f��dSr5)
rArz�lowerrCr�rr�r�
executabler�)r;rHrzr!r?r?r@�	test_name(szTestProcess.test_namezunreliable on PYPYzunreliable on QEMU usercCs�t|jtjdd��}|ddg}|�|�}tr�z|��tj�	|�ksHJ�Wq�t
y�|��tj
kr�tj�	|��|���s�J�n�Yq�0n|��tj�	|�ks�J�dS)Nr���suffixrcr)r)r��string�digitsrArrzrCr�rr�statusr7�
STATUS_ZOMBIEr��r;r!rrHr?r?r@�test_long_name.s�

zTestProcess.test_long_namezbroken on SUNOSz
broken on AIXzbroken on QEMU usercCspt|jdd��}|ddg}|�|�}|��|ks4J�|��tj�|�ksLJ�tj�|�	��tj�|�kslJ�dS)Nz	foo bar )r*rcr)
r)r�rArrzrCr�rrrr0r?r?r@�test_prog_w_funky_nameKs�
z"TestProcess.test_prog_w_funky_namecCsXt��}|��\}}}|t��ks&J�|t��ks6J�ttd�rTt��|��ksTJ�dS�N�	getresuid)r7r8�uidsrC�getuid�geteuid�hasattrr4�r;rH�realZ	effectiveZ_savedr?r?r@�	test_uids^s
zTestProcess.test_uidscCsXt��}|��\}}}|t��ks&J�|t��ks6J�ttd�rTt��|��ksTJ�dSr3)r7r8�gidsrC�getgid�getegidr8�	getresgidr9r?r?r@�	test_gidsls
zTestProcess.test_gidsc
s��fdd�}t���t�t����d�Wd�n1s>0Y���}|�||�t�r(d}tjtj	tj
tjtjtj
fD]�}|j|d���z��|�Wntjy�YnN0���}|tjtjtj
fvr�||ks�|dur�|}||ks�J�n||k�sJ�Wd�q�1�s0Yq�n�z�ttd��rVt�tjt������k�sVJ���d����dk�srJ�ttd��r�t�tjt������k�s�J�t�s���d����dk�s�J�Wntj�y�Yn0dS)Ncs(z��|�Wntjy"Yn0dSr5)�nicer7ra)r�r�r?r@r�{sz&TestProcess.test_nice.<locals>.cleanup�str)�prio�getpriorityrfr)r7r8r,rEr�rAr�rZIDLE_PRIORITY_CLASSZBELOW_NORMAL_PRIORITY_CLASSZNORMAL_PRIORITY_CLASSZABOVE_NORMAL_PRIORITY_CLASSZHIGH_PRIORITY_CLASSZREALTIME_PRIORITY_CLASS�subTestrar8rCrD�PRIO_PROCESSrDr)r;r�r�Zhighest_priorCZnew_prior?r�r@�	test_nicezs`(��2��
��
zTestProcess.test_nicecCst��}|��tjksJ�dSr5)r7r8r.ZSTATUS_RUNNINGrGr?r?r@�test_status�szTestProcess.test_statuscCs||��}|��}trh|�d�\}}t��}|�d�r>t�d��||ksJJ�dt	j
vrx|t	j
dksxJ�n|t��ksxJ�dS)N�\�$zrunning as service accountZ
USERDOMAIN)rA�usernamer�split�getpass�getuser�endswithr,r�rC�environ)r;rHrK�domainZgetpass_userr?r?r@�
test_username�s


zTestProcess.test_usernamecCs |��}|��t��ksJ�dSr5)rA�cwdrC�getcwdrGr?r?r@�test_cwd�szTestProcess.test_cwdcs(tddg}|�|��t�fdd��dS)NrczFimport os, time; os.chdir('..'); [time.sleep(0.1) for x in range(100)]cs���tj�t���kSr5)rSrCr��dirnamerTr?r�r?r@�<lambda>�r�z(TestProcess.test_cwd_2.<locals>.<lambda>)r!rAr&)r;rjr?r�r@�
test_cwd_2�s�
zTestProcess.test_cwd_2cCs�t��}|��}|sJ|��|�|j|�ttd�rL|tt�|j��ksLJ�t	|�t	t
|��ksdJ�ttt	tjdd����}|D]j}|�|g�|��|gks�J�ttd�r�|��tt�|j��ks�J�t|d�r�|��d|�
�ks�J�q�|�g�t�r|��|j��k�s(J�n|��|k�s(J�ttd��rR|��tt�|j��k�sRJ�t�t��|�d�Wd�n1�s~0Y|�|�|�t
|��|�t|��dS)N�sched_getaffinityT�Zpercpu�num_cpurrf)r7r8�cpu_affinityr�r8rC�listrYr9r�r�r�r�r[r�_procZ_get_eligible_cpusr,rEr�r�)r;rH�initialZall_cpus�nr?r?r@�test_cpu_affinity�s4



*
zTestProcess.test_cpu_affinitycCs|��}ttjdd��dg}t�t��|�|�Wd�n1sH0Yt�t�� |�tdd��Wd�n1s�0Yt�t	��|�ddg�Wd�n1s�0Yt�t��|�ddg�Wd�n1s�0YdS)	NTrZ�
i'i�*r�1ry)
rAr�r7r�r,rEr{r\r�r�)r;rHZinvalid_cpur?r?r@�test_cpu_affinity_errs	s(.,z"TestProcess.test_cpu_affinity_errscCs�t��}|��}|sJ|��|�|j|�t|�dkrB|dd�}g}tt|�d�D](}t�||�D]}|rf|�t	|��qfqV|D]&}|�|�t
|���t
|�ks�J�q�dS)N�rf)r7r8r\r�r�r��	itertools�combinations�appendr]�sorted)r;rHr_Zcombosr�ZsubsetZcombor?r?r@�"test_cpu_affinity_all_combinationss
z.TestProcess.test_cpu_affinity_all_combinationsz
broken on BSDzunreliable on APPVEYORcsrt���|��}����|�vs$J�t|d���}|�d�|��t��fdd������dd��D�}tj	�
|�|vs~J�tr��D]}|j	|kr�|jdks�J�q�Wd�n1s�0Y�D]}tj	�
|j	�s�J|��q�d|}|�td	|g��td
�D]2}dd����D�}||v�r(�qLt�d��qtj	�
|�|v�sLJ�|D]}tj	�
|��sPJ|���qPdS)
Nr�sxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcst����t��kSr5)r��
open_filesr?��filesrHr?r@rW7r�z-TestProcess.test_open_files.<locals>.<lambda>cSsg|]}tj�|j��qSr?�rCr�rr�r?r?r@r�9r�z/TestProcess.test_open_files.<locals>.<listcomp>r�zIimport time; f = open(r'%s', 'r'); [time.sleep(0.1) for x in range(100)];rcr�cSsg|]}tj�|j��qSr?rnr�r?r?r@r�Jr�rt)r7r8r�rkr�r��flushr&rCr�rr�position�isfilerAr!r�r}�sleep)r;r�r��	filenames�filerr�r?rlr@�test_open_files+s<

.��
zTestProcess.test_open_filescCst��}tjj}|��}t|d���}|��D]*}||j�||j�ksR|j	|�
�kr,qnq,|�dt|�����||j�||j�ks�J�t
r�|j	dks�J�n|j	|�
�ks�J�|��d}|d|jks�J�|d|j	ks�J�|j|��vs�J�Wd�n1�s0YdS)N�wzno file found; files=%sryrrf)r7r8rCr�rr�r�rkrz�fd�filenor~�reprr)r;rHrr��fileobjrtZntupler?r?r@�test_open_files_2Ts*���zTestProcess.test_open_files_2cCs�t��}|��}|��}t|d�}|�|j�|��|dksBJ�t��}|�|j�|��|dksjJ�|��|��|��|ks�J�dS)Nrvrfr�)r7r8r�Znum_fdsr�r��close�socket)r;rHr��startrt�sockr?r?r@�test_num_fdsss
zTestProcess.test_num_fdsz not reliable on OPENBSD & NETBSDcCsTt��}t|���}td�D](}t�d�t|���}||krdSq|�d��dS)Nr�g�������?z2num ctx switches still the same after 2 iterations)r7r8r�Znum_ctx_switchesr�r}rrr~)r;rH�beforer��afterr?r?r@�test_num_ctx_switches�s
z!TestProcess.test_num_ctx_switchescCsFt��}ttd�r&|��t��ks&J�|��}|��t��ksBJ�dS)N�getppid)r7r8r8rC�ppidr�rArDrGr?r?r@�	test_ppid�s

zTestProcess.test_ppidcCsD|��}|��jt��ksJ�t��d}t�|���dus@J�dSr�)rA�parentr9rCrDr7�pidsr8)r;rHZ
lowest_pidr?r?r@�test_parent�szTestProcess.test_parentcCs8t��}|��\}}|��|ks$J�|��|ks4J�dSr5)r7r8rur��r;r�rvrwr?r?r@�test_parent_multi�szTestProcess.test_parent_multicCs`t��}|��sJ�|��\}}|��d|ks4J�|��d|ksHJ�|��d|ks\J�dSr�)r7r8�parentsrur�r?r?r@�test_parents�szTestProcess.test_parentscCs�t��}|��gksJ�|jdd�gks,J�|jdd�}|��}|jdd�}||fD]>}t|�dkshJ�|dj|jks|J�|d��|jksTJ�qTdS)NT��	recursiver)�
creationflagsrf)r7r8�childrenrAr�r9r�)r;r�rvZ	children1Z	children2r�r?r?r@�
test_children�szTestProcess.test_childrencCsft��}|��\}}|��|gks&J�|jdd�||gks>J�|��|��|jdd�gksbJ�dS)NTr�)r7r8rur�rSrKr�r?r?r@�test_children_recursive�sz#TestProcess.test_children_recursivec	Cs�t�t�}t��D]2}z||��d7<WqtjyBYq0qt|��dd�d�dd}t	rx|dkrxt
�d��t�|�}z|j
dd	�}Wntjy�Yn0t|�tt|��ks�J�dS)
NrfcSs|dS)Nrfr?)r�r?r?r@rW�r�z6TestProcess.test_children_duplicates.<locals>.<lambda>)�keyryrzPID 0Tr�)�collections�defaultdictrr7�process_iterr��Errorri�itemsrr,r�r8r�rar�r�)r;�tablerHr9�cr?r?r@�test_children_duplicates�s


z$TestProcess.test_children_duplicatescCs|t��}|��\}}|jdd�}t|�dks0J�|d|ks@J�|d|ksPJ�|��}|d|kshJ�|d|ksxJ�dS)NTr�r�rrf)r7r8rur�r�r�)r;r�rvrwr�r�r?r?r@�test_parents_and_children�sz%TestProcess.test_parents_and_childrencCsX|��}|��td�D] }|��tjkr.q:t�d�q|��|��tjksTJ�dS)Nr�rt)	rArqr�r.r7ZSTATUS_STOPPEDr}rrrr)r;rHr�r?r?r@�test_suspend_resume�szTestProcess.test_suspend_resumecCslt�t��t�d�Wd�n1s*0Yt�t��t�d�Wd�n1s^0YdS)Nrcry)r,rEr�r7r8r{�r;r?r?r@�test_invalid_pid�s(zTestProcess.test_invalid_pidc	Cs�t��}|jddgd�}t|���ddgks0J�t�tt����}|jdgdd�}t|dt�sp|ddkspJ�t	j
ddtjd	��,|jd
gdd�d
diks�J�Wd�n1s�0Yt	j
ddt�|j
d�d	��Lt�tj��|jd
gd�Wd�n1�s0YWd�n1�s,0Yt	j
ddt�|j
d�d	��.|jd
gdd�d
dik�spJ�Wd�n1�s�0Yt	j
ddtd	��h|��}d
t|���v�s�J�t�t��|jd
gd�Wd�n1�s�0YWd�n1�s0Yt�t��|�d�Wd�n1�sF0Yt�t��|�dg�Wd�n1�s~0Yt�t��|�ddg�Wd�n1�s�0YdS)
Nrrz)�attrsZnet_connections�foo)r�Zad_valuezpsutil.Process.niceT)�creater\rArf�bar)r7r8Zas_dictri�keysr�r�r�r]r*r]rar:r9r,rEr%�NotImplementedErrorr�r{)r;rH�dr?r?r@�test_as_dict�sJ�:�N�>�N*,zTestProcess.test_as_dictc	Cs�t��}t�d��V}|��� |��|��Wd�n1sB0Y|jdksZJ�Wd�n1sn0Yt�d�� }|��|��Wd�n1s�0Y|jdks�J�dS)N�$psutil._psplatform.Process.cpu_timesrfr��r7r8r*r]�oneshotr�Z
call_count�r;rHr�r?r?r@�test_oneshot/s
&,&zTestProcess.test_oneshotcCs8t��}t�d���}t�d���}|���X|��|��|��� |��|��Wd�n1sh0YWd�n1s�0Y|jdks�J�|jdks�J�Wd�n1s�0YWd�n1s�0Yt�d�� }|��|��Wd�n1�s0Y|jdk�s4J�dS)Nr�z(psutil._psplatform.Process.oneshot_enterrfr�r�)r;rH�m1�m2r�r?r?r@�test_oneshot_twice<s

DJ(zTestProcess.test_oneshot_twicecCs�|��\}}|��}|��}||ks(J�|���0|��|ksBJ�|��|ksRJ�Wd�n1sf0Y|���0|��|ks�J�|��|ks�J�Wd�n1s�0YdSr5)rur�r�)r;�p1�p2Zp1_ppidZp2_ppidr?r?r@�test_oneshot_cachePs
.
zTestProcess.test_oneshot_cachecsn�fdd�}����������tr8t�fdd������t��}|�|j�D]\}}|||�qVdS)Ncs�z
|�}WnNtjy �Yn\tjy2YnJtjyXtrR|dvrRYdS�Yn$0trj|dvrjdS��d||f��dS)N)r�r�)rrzz+%r didn't raise NSP and returned %r instead)r7r%r:rarrr~)�funZfun_namer�r�r?r@�assert_raises_nspgs

�zFTestProcess.test_halfway_terminated_process.<locals>.assert_raises_nspcs�jt��vSr5)r9r7r�r?r�r?r@rW~r�z=TestProcess.test_halfway_terminated_process.<locals>.<lambda>)	rArSrKrr&rOr+�iter�all)r;r��nsr�rzr?)rHr;r@�test_halfway_terminated_process_s
z+TestProcess.test_halfway_terminated_processcCs|��\}}|�|�dSr5)Zspawn_zombieZassertProcessZombie)r;�_parentZzombier?r?r@�test_zombie_process�szTestProcess.test_zombie_processcCsVt��}tjdt�d�d��&}|��s*J�|js4J�Wd�n1sH0YdS)Nzpsutil.Processrr[)r7r8r*r]r%rr�r�r?r?r@�$test_zombie_process_is_running_w_exc�s
�z0TestProcess.test_zombie_process_is_running_w_exccCs\t��}tjdt�d�d��,}|��tjks0J�|js:J�Wd�n1sN0YdS)Nz!psutil._psplatform.Process.statusrr[)r7r8r*r]r%r.r/r�r�r?r?r@� test_zombie_process_status_w_exc�s�z,TestProcess.test_zombie_process_status_w_excc	
Cs�trddlm}nddlm}|��}t�|j�}|j|��df|_t	t�
��|jtjvsbJ�|��rnJ�t
j�tjdd��Ft|���}t	t�
��Wd�n1s�0YWd�n1s�0Yd|j|��vs�J�|jtjvs�J�|t�|j�k�sJ�d}t|�}|j|j|jdd	�D]p\}}|j|d
��Htjtj|d��|�Wd�n1�sx0YWd�n1�s�0Y�q4dt|�v�s�J�dt|�v�s�J�tjtj|d��|��Wd�n1�s�0Ytjtj|d��|��Wd�n1�s40Ytjtj|d��|��Wd�n1�sn0Ytjtj|d��|� �Wd�n1�s�0YdS)
Nr)�StringIOr�ZPSUTIL_DEBUGTz-refreshing Process instance for reused PID %sz4process no longer exists and its PID has been reusedF)�clear_cache)rzr�zterminated + PID reused)!r�ior�r6r7r8r9r��_identr]r�Z_pmaprr*r]�object�_commonr�getvaluer+r��settersZkillersrEr,rEr:rBryr�r�r�r�)	r;r�ZsubprHr��msgr�r�rzr?r?r@�test_reused_pid�sDH��J(((zTestProcess.test_reused_pidc	Cs�dt��vrjt�tj��t�d�Wd�n1s80Yt�d�rPJ�t�d���dksfJ�dSt�d�}tr~tj	nt
}t�|��|��Wd�n1s�0Yt�|��|��Wd�n1s�0Yt�|��|�
�Wd�n1�s0Yt�|��|��Wd�n1�sD0Yt�|��|��Wd�n1�sx0Yt�|��|�tj�Wd�n1�s�0Yt|�}|�|j|j�D]�\}}z
|�}Wntj	�y�Ynb0|dv�r|jdk�s^J�nD|dk�rFt�r.dnd}|��|k�s^J�n|dk�r�|�s�J|���q�t�s�dt��v�szJ�t�d��s�J�dS)Nrrf)r5r<rKzNT AUTHORITY\SYSTEM�rootrz)r7r�r,rEr:r8Z
pid_existsr�rrar{rKrSrqrrrJrUrLrMr+r�Zgettersr�r:rKr)r;rHr�r�r�rzr�r�r?r?r@�
test_pid_0�sH(
&&(((,



zTestProcess.test_pid_0cCsHdd�}d|_t��}||���}|tj���}tsDtrD||ksDJ�dS)NcSsFgd�}tr|�gd��|D]}|�|d�qtdd�|��D��S)N)�PLAT�HOMEZPYTEST_CURRENT_TESTZPYTEST_VERSION)Z__CF_USER_TEXT_ENCODINGZVERSIONER_PYTHON_PREFER_32_BIT�VERSIONER_PYTHON_VERSIONr�cSs8g|]0\}}|�dd��dd�|�dd��dd�f�qS)�
rZ�
)r)r��k�vr?r?r@r�
s��z@TestProcess.test_environ.<locals>.clean_dict.<locals>.<listcomp>)rr$�pop�dictr�)r��excluderzr?r?r@�
clean_dict�s�z,TestProcess.test_environ.<locals>.clean_dict)ZmaxDiffr7r8rPrC�copyr	r)r;r�rHZd1Zd2r?r?r@�test_environ�szTestProcess.test_environz<macOS 11+ can't get another process environment, issue #2084z(sometimes fails on `assert is_running()`cCs�t�d�}t|��|d�}|j|gtjtjd�}t�|j	�}t
|j	�|��sRJ�|j�
�dksdJ�tr�tr�z|��}Wq�tjy�YdS0n|��}|ddd�ks�J�|��|jdks�J�dS)	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);
            }
            )Zc_code)�stdinrer�rc�3)�A�Cr)�textwrap�dedentr(r�r6rhrir7r8r9r3rrer�rrrPra�communicate�
returncode)r;rQZcexer>rH�envr?r?r@�test_weird_environs$
�

zTestProcess.test_weird_environN)m�__name__�
__module__�__qualname__�__doc__rArIrRrTrWr,�mark�skipifr
rbrkrrsrxr|rr�r�r#r�r�rr�r�r�rr2rr�rr�rr�rr�r�r�r�r�r�r�rr�r/r1rr�r�r�rr
rrrrr"r r&r)r1rrr2r;r@rGrHrRrUrXrrardrjrrrur{r�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr�rr�r?r?r?r@r4Ps 










)+�








/
	





B

&

&

�



4
&



..
��r4csreZdZdZeed�r&e��Ze��Z	�fdd�Z
�fdd�Z�fdd�Zd	d
�Z
ejjddd
�dd��Z�ZS)�LimitedUserTestCasez�Repeat the previous tests by using a limited user.
        Executed only on UNIX and only if the user who run the test script
        is root.
        r6csXt�j|i|��dd�t|�D�D].}t||���fdd�}t||t�||��q$dS)NcSsg|]}|�d�r|�qS)�testr�r�r?r?r@r�`r�z0LimitedUserTestCase.__init__.<locals>.<listcomp>cs$z
��WntjyYn0dSr5)r7rar���methr?r@�test_cs
z+LimitedUserTestCase.__init__.<locals>.test_)r�__init__r�r��setattr�types�
MethodType)r;r<r=�attrr���	__class__r�r@r�\s

zLimitedUserTestCase.__init__cs"t���t�d�t�d�dS)Ni�)r�setUprC�setegid�seteuidr�r�r?r@r�ks

zLimitedUserTestCase.setUpcs&t�|j�t�|j�t���dSr5)rCr��PROCESS_UIDr��PROCESS_GIDr�tearDownr�r�r?r@r�pszLimitedUserTestCase.tearDowncCs6zt���d�Wntjy&Yn0|�d��dS)Nryzexception not raised)r7r8rArar~r�r?r?r@rGus
zLimitedUserTestCase.test_niceTzcauses problem as rootrXcCsdSr5r?r�r?r?r@r�}sz'LimitedUserTestCase.test_zombie_process)r�r�r�r�r8rCr6r�r=r�r�r�r�rGr,r�r�r��
__classcell__r?r?r�r@r�Qs
r�c@s4eZdZdZedd��Zdd�Zdd�Zdd	�Zd
S)�	TestPopenzTests for psutil.Popen class.cCs
t�dSr5r-)�clsr?r?r@�
tearDownClass�szTestPopen.tearDownClassc	Cs�tddg}tj|tjtjtd��j}|��|��|jt	|�sDJ�t
�t��|j
Wd�n1sj0Y|��Wd�n1s�0Ytr�|�d�tjks�J�n|�d�tjks�J�dS)Nrc�3import time; [time.sleep(0.1) for x in range(100)];��stdoutrer�rg)r!r7�Popenrhrir"rzr�r�r�r,rErFr�rSr
rKrLrM�r;rj�procr?r?r@�	test_misc�s*��$&zTestPopen.test_misccCs|tjtdgtjtjtjtd��}|��Wd�n1s<0Y|jjsRJ�|j	js^J�|j
jsjJ�|jdksxJ�dS)Nz-V)r�rer�r�r)r7rr!rhrir"r�r��closedrer�r�)r;rr?r?r@�test_ctx_manager�s�&zTestPopen.test_ctx_managerc	Csrtddg}tj|tjtjtd���:}|��|��t�	tj
��|��Wd�n1s^0Yt�	tj
��|��Wd�n1s�0Yt�	tj
��|�t
j�Wd�n1s�0Yt�rNt�	tj
��|�t
j�Wd�n1�s
0Yt�	tj
��|�t
j�Wd�n1�sD0YWd�n1�sd0YdS)Nrcr�r�)r!r7rrhrir"rSrKr,rEr:rJrUrLrMrZCTRL_C_EVENTZCTRL_BREAK_EVENTrr?r?r@�test_kill_terminate�s0��&&*,zTestPopen.test_kill_terminateN)	r�r�r�r��classmethodr�rrrr?r?r?r@r��s
r�)Gr�r�r_rMrfrCrLr}rr,rhrr�r}r�r7rrrrrrr	r
rrZpsutil._commonr
Zpsutil._compatrrrrrZpsutil.testsrrrrrrrrrrrrrr r!r"r#r$r%r&r'r(r)r*r+r,r.r/r0r1r2r3r4r6r�r�r?r?r?r@�<module>s�6