U g@sdZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlmZddlmZddlmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlm 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.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!mZ>dd/l!m?Z?dd0l!m@Z@dd1l!mAZAGd2d3d3e3ZBereCdkrGd4d5d5eBZDGd6d7d7e3ZEdS)8Tests for psutil.Process class.N)AIX)BSD)LINUX)MACOS)NETBSD)OPENBSD)OSX)POSIX)WINDOWS) open_text)PY3)FileNotFoundError)long)redirect_stderr)super)APPVEYOR) CI_TESTING)GITHUB_ACTIONS)GLOBAL_TIMEOUT)HAS_CPU_AFFINITY) HAS_ENVIRON) HAS_IONICE)HAS_MEMORY_MAPS)HAS_PROC_CPU_NUM)HAS_PROC_IO_COUNTERS) HAS_RLIMIT) HAS_THREADS) MACOS_11PLUS)PYPY) PYTHON_EXE)PYTHON_EXE_ENV) QEMU_USER)PsutilTestCase) ThreadTask) call_until)copyload_shared_lib) create_c_exe) create_py_exe)mock)process_namespace)pytest reap_children)retry_on_failure)sh)skip_on_access_denied)skip_on_not_implemented) wait_for_pidc@seZdZdZddZddZddZdd Zd d Ze j j e d d ddZ ddZe j j edd ddZddZddZddZddZddZe j j edd d d!Ze j j edd d"d#Ze j j e d$d d%d&Zd'd(Ze j j e d)d d*d+Ze j j e d$d eed,d-d.Z e j j e! d$d e j j e d/d d0d1Z"e j j e! d$d e j j e# d2d d3d4Z$e j j e% d$d d5d6Z&e j j e% d$d d7d8Z'e j j e% d$d d9d:Z(e j j e% d$d d;d<Z)e j j e% d$d d=d>Z*d?d@Z+e j j e# dAd dBdCZ,e j j e- d$d dDdEZ.e/e0e1d,e j j e- d$d dFdGZ2e/dHdIZ3dJdKZ4e j j e5 d$d dLdMZ6e j j e5 d$d dNdOZ7dPdQZ8dRdSZ9e j j edd dTdUZ:dVdWZ;e j j ee j j e<ped]d e j j ed^d e j j e1o2e? d_d d`daZ@e j j e d)d dbdcZAe j j e d)d dddeZBdfdgZCe j j edd dhdiZDdjdkZEdldmZFdndoZGe j j eH d$d dpdqZIe j j eH d$d drdsZJe j j eH d$d dtduZKe j j eLdvd e j j eMdwd dxdyZNe j j eLdvd e j j eMdwd dzd{ZOe j j e d)d d|d}ZPeed,e j j eQped~d ddZRddZSddZTddZUe j j edd e/ddZVddZWddZXddZYddZZddZ[ddZ\ddZ]ddZ^ddZ_ddZ`ddZae j j e d)d ddZbe j j e d)d ddZce j j e d)d ddZdddZeddZfe j j eg d$d ddZhe j j eg d$d e j j e d)d e j j eidd e j j edd ddZjdS) TestProcessrcOsD|j||}zt|jWStjk r>||jYnXdSN)spawn_testprocpsutilProcesspid NoSuchProcessZ assertPidGone)selfargskwargssprocr>I/opt/hc_python/lib64/python3.8/site-packages/psutil/tests/test_process.py spawn_psprocRs   zTestProcess.spawn_psprocc Cs:t}|jtksttt d|_W5QRXdS)N!) r6r7r8osgetpidAssertionErrorr+raisesAttributeErrorr:pr>r>r?test_pid\s zTestProcess.test_pidcCsJ|}||}tr,|tjksr>r? test_killbszTestProcess.test_killcCsJ|}||}tr,|tjksr>r?test_terminatelszTestProcess.test_terminatecCsXtr tjntj}|}|||}tr<||ksJtn|| ksJt| |dSr4) r rLrNrMr@ send_signalrKr rDrO)r:sigrHrQr>r>r?test_send_signalvs zTestProcess.test_send_signalz not POSIXreasonc Cstj}|}tjdttjdd(t t j | |W5QRXW5QRX|}tjdttj dd(t t j| |W5QRXW5QRXdS)Nzpsutil.os.kill side_effect)rLrMr@r)patchOSErrorerrnoZESRCHr+rEr6r9rUEPERM AccessDenied)r:rVrHr>r>r?test_send_signal_mockeds  z#TestProcess.test_send_signal_mockedcCstddg}||}|}|dks(t||tddg}|j|tjd}|}|dks`t||tddg}||}|}|dkst||tdd g}||}|}|dkst||dS) N-cpassrz1 / 0)stderrzimport sys; sys.exit(5);zimport os; os._exit(5);)r r@rKrDrO subprocessPIPE)r:cmdrHrQr>r>r?test_wait_exiteds(              zTestProcess.test_wait_exitedzfails on NETBSDc Cs.|}tr|tjttj|j ddW5QRX|tj ttj|j ddW5QRX|tj | tj kst | tj kst n| ttj|j ddW5QRX|ttj|j ddW5QRX|| tj kst | tj ks*t dS)NMbP?)timeout)r@r rUrLSIGSTOPr+rEr6TimeoutExpiredrKSIGCONTrMrDsuspendresumerSrGr>r>r?test_wait_stoppeds(   zTestProcess.test_wait_stoppedc Cs|\}}ttj|dW5QRXttj|dW5QRX|||}|}tr|tj kst |dkst n|tj kst |tj kst dS)N{Gz?) spawn_children_pairr+rEr6rorKrSr rLrMrD)r:child grandchildZ child_retZgrandchild_retr>r>r?test_wait_non_childrens z"TestProcess.test_wait_non_childrenc Csx|}|ttj|dW5QRXttj|dW5QRXtt|dW5QRXdS)Nrtr)r@namer+rEr6rorK ValueErrorrGr>r>r?test_wait_timeouts zTestProcess.test_wait_timeoutc Cs|}ttj|dW5QRX|tt}t|krvz|d}WqWq>tjk rrYq>Xq>| dt r|t j kst n|t jkst ||dS)Nrrm)r@r+rEr6rorKrJtimerfailr rLrNrDrMrO)r:rHZstop_atrQr>r>r?test_wait_timeout_nonblockings     z)TestProcess.test_wait_timeout_nonblockingc Cszt}|jdd|jddtdD]*}|jdd}t|tsFt|dks(tq(tt |jddW5QRXdS)Nrl)intervaldry) r6r7 cpu_percentrange isinstancefloatrDr+rEr{)r:rH_percentr>r>r?test_cpu_percents     zTestProcess.test_cpu_percentc Cs4tjddd}t|js&tW5QRXdS)Nzpsutil.cpu_count)Z return_value)r)r]r6r7rcalledrD)r:mr>r>r?test_cpu_percent_numcpus_nones z)TestProcess.test_cpu_percent_numcpus_nonezQEMU user not supportedc Cst}|jdkst||jdks0t||jdksBt||jdksTt|trj|j dksjt||j D]}t dt t||qpdS)Nrz%H:%M:%S)r6r7 cpu_timesuserrDsystem children_userchildren_systemrZiowait_fieldsr}strftime localtimegetattr)r:timesrzr>r>r?test_cpu_times s  zTestProcess.test_cpu_timescCstdd\}}tdd\}}t||gt||gdkrZ|d||ft||gt||gdkr|d||fdS)N皙?zexpected: %s, found: %s)r6r7rrBrmaxminr~)r: user_timeZ kernel_timeutimeZktimer>r>r?test_cpu_times_2s zTestProcess.test_cpu_times_2z not supportedcCsPt}|}|dksttdkr4|dks4t|ttksLtdSNrrf)r6r7Zcpu_numrD cpu_countr)r:rHnumr>r>r? test_cpu_num(s    zTestProcess.test_cpu_numcCsZ|}t}|}t||}|dkr@|d|||ftdt|dS)Nrz'expected: %s, found: %s, difference: %sz%Y %m %d %H:%M:%S)r@r} create_timeabsr~rr)r:rHnowr differencer>r>r?test_create_time1s zTestProcess.test_create_timez POSIX onlycCsXt}|dk rTztjtd}Wntk rFt dYnX||ksTt dS)Nttyzcan't rely on `tty` CLI) r6r7terminalrBpathrealpathr/ RuntimeErrorr+skiprD)r:rrr>r>r? test_terminalCs zTestProcess.test_terminal)Zonly_ifc Cst}|}ttd}|W5QRX|}tsts|j|jksNt |j |j ks^t t r|j |j ksrt |j |j kst n |j|jkst |j|jkst |}t|d.}tr|tdddn|ddW5QRX|}|j |j kst |j|jkst |j|jks,t |j|jks>t t rh|j |j ksVt |j |j ksht tt|D]>}tr|dkrqt||dkst ||dkstt qtdS)Nrbwbxi@Basciirr)r6r7Z io_countersopenr readrrZ read_countrDZ write_countrZ read_charsZ write_chars read_bytes write_bytes get_testfnr writebytesrlen)r:rHZio1fZio2ir>r>r?test_io_countersOs> zTestProcess.test_io_countersz linux onlyc sfdd}tts.dtjks.ttjdksr?cleanup}s z.TestProcess.test_ionice_linux..cleanuprrfrrzioclass accepts no valuematchz$'ioclass' argument must be specified)r6r7rrrrDZIOPRIO_CLASS_RTZIOPRIO_CLASS_BEZIOPRIO_CLASS_IDLE addCleanuptupler+rEr{ra)r:rrr>rr?test_ionice_linuxzsB      zTestProcess.test_ionice_linuxz!not supported on this win versionc Cst}ts|tjkst|}||j||tj|tjksRt|tj|tjksptz|tj Wntj k rYnX|tj kstt j t dd|jtjddW5QRXt j tdd|tj dW5QRXdS)Nz&value argument not accepted on Windowsrrfrzis not a valid priority)r6r7rrZ IOPRIO_NORMALrDrZIOPRIO_VERYLOWZ IOPRIO_LOWZ IOPRIO_HIGHrar+rE TypeErrorr{)r:rHrr>r>r?test_ionice_wins*  zTestProcess.test_ionice_wincCsddl}tt}ddttD}|s4t||D]}tt|}|dksRt|t|kr|t||kspttrvq8| || |kstq8| |}t |dkst|ddkst|ddks8tq8dS)NrcSsg|]}|dr|qS)ZRLIMIT startswith.0rr>r>r? s z/TestProcess.test_rlimit_get..rryrf) resourcer6r7rBrCdirrDrrrlimitZ getrlimitr)r:rrHnamesrzrretr>r>r?test_rlimit_gets      zTestProcess.test_rlimit_getc Cs|}|tjd|tjdks*ttrZtjtddtj ddW5QRXtt|tjdW5QRXdS)N)rgrgzcan't use prlimitrr)rgrgrg) r@rr6Z RLIMIT_NOFILErDrr+rEr{Z _psplatformr7rGr>r>r?test_rlimit_sets zTestProcess.test_rlimit_setc Cst}|}|tj\}}z|tjd|ft|d}|dW5QRXt t &}t|d}|dW5QRXW5QRXt r|j j n|j dt jkstW5|tj||f|tj||fkstXdS)NrsXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXsXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr)r6r7rr RLIMIT_FSIZErDrrr+rEIOErrorr rr_ZEFBIG)r:rHtestfnsofthardrexcr>r>r? test_rlimits   $zTestProcess.test_rlimitc Cst}|tj\}}zN|tjd|f|tjtj|ft|d}|dW5QRXW5|tj||f|tj||fkstXdS)NrrsXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX) r6r7rrrD RLIM_INFINITYrrr)r:rHrrrr>r>r?test_rlimit_infinitysz TestProcess.test_rlimit_infinitycCs<t}|tj\}}|tjks&t|tj||fdSr4)r6r7rrrrD)r:rHrrr>r>r?test_rlimit_infinity_value sz&TestProcess.test_rlimit_infinity_valuec Csrt}trr>r?test_num_threadss zTestProcess.test_num_threadsz WINDOWS onlycCst}|dkstdSr)r6r7Z num_handlesrDrGr>r>r?test_num_handles)szTestProcess.test_num_handlesc Cst}trr>r? test_threads/s zTestProcess.test_threadscCs|}tr:z |Wn tjk r8tdYnXt|j t dd|Ddksft t|j t dd|Ddkst dS)NrcSsg|] }|jqSr>)rrr>r>r?rNsz.TestProcess.test_threads_2..rcSsg|] }|jqSr>)rrr>r>r?rTs) r@rrr6rar+rrrrsumrDrrGr>r>r?test_threads_2Cs$ "zTestProcess.test_threads_2c Cst}|dd\}}|}|dks0t|dksr>r?test_memory_infoYs&       zTestProcess.test_memory_infocCst}tj}|}|jD]8}t||}|dks:t|dkrFts t rLq ||ks tq t sft sft rt|j dksttt r|j dkst|jdkstdS)Nrr)r6r7Zvirtual_memorytotalZmemory_full_inforrrDr rr russZpssZswap)r:rHrrrzrr>r>r?test_memory_full_infoxs     z!TestProcess.test_memory_full_infoc Cst}|}t|tt|ks(t|jdd}|D]}|jds8trZd|jkrZq8t j |jsrt|jt rz*t j |jst j |jst|jWnHtk rtsn,td}|}W5QRXd|j|krYnXq8dt j|jkr8zt |j}Wntk r$Yq8Xt|js8t|jq8|D]l}|jD]^}t||} |dkrhqL|d kr| st| n&t| ttfst| d ksLt| qLqBdS) NF)grouped[z /bin/qemu-z/proc/self/smapsz %s (deleted)Z64r>addrpermsr)r6r7 memory_mapsrsetrDrrr"rBisabsr existsislinkrr rbasenamestatrS_ISREGst_moderrrintr) r:rHmapsZext_mapsntrdatastfnamerr>r>r?test_memory_mapssL         zTestProcess.test_memory_mapsc sLt}t4}ddfdd|D}||ks>tW5QRXdS)NcSstjtj|Sr4)rBrrnormcaserr>r>r?normpathsz8TestProcess.test_memory_maps_lists_lib..normpathcsg|]}|jqSr>)rrrr>r?rsz:TestProcess.test_memory_maps_lists_lib..)r6r7r&rrD)r:rHrZlibpathsr>rr?test_memory_maps_lists_libs z&TestProcess.test_memory_maps_lists_libc CsNt}|tt|jddW5QRXts>ts>trJ|jdddS)Nz?!?)Zmemtyper) r6r7rr+rEr{rrr rGr>r>r?test_memory_percents   zTestProcess.test_memory_percentcCsL|}|st|s t|||rr>r?test_is_runnings   zTestProcess.test_is_runningc Cs|}|}z|tkstWntk rtrbt|ttkrbtjj}|||tkstnNdt j dt j df}z | |dt |dkstWntk rYnXYnXt |ddg}|dkstdS)Nz%s.%srrfrZrczimport os; print('hey')Zhey) r@exer rDr rrBrrsys version_inforeplacer/)r:rHrrveroutr>r>r?test_exes  zTestProcess.test_execCstddg}||}tr.|gkr.tdts:ts:trP|dtkstnt rt r|d}|tkrd |ddd |ddkstdSt rd |ddd |kstdSd |d |kstdS)Nrc2import time; [time.sleep(0.1) for x in range(100)]OPENBSD: returned EBUSYr rfr) r r@rcmdliner+rrrrDrrjoinr")r:rrHpyexer>r>r? test_cmdlines$    ,$zTestProcess.test_cmdlinezbroken on PYPYcCstg}|dgd|ddg||}trjz||ksDtWqtjk rft dYqXnHt r|dd|kstn*|}t r|gkrt d||kstdS)Nz-v2rcrz#OPENBSD: process turned into zombierr) r extendr@rrrDr6 ZombieProcessr+rr"r)r:rrHrr>r>r?test_long_cmdlines"   zTestProcess.test_long_cmdlinecCsH|}|}tjtjtj}| |sDt ||fdSr4) r@rzlowerrBrrrr executablerrD)r:rHrzr!r>r>r? test_name&s zTestProcess.test_namezunreliable on PYPYzunreliable on QEMU userzbroken MACOS + PY2cCst|jtjdd}|ddg}||}trz|tj |ksHt Wqt k r| t j krtj ||st nYqXn|tj |kst dS)Nr)suffixrcr)r(rstringdigitsr@rrzrBrrrDstatusr6 STATUS_ZOMBIEr)r:r!rrHr>r>r?test_long_name,s  zTestProcess.test_long_namecCsXt}|\}}}|tks&t|tks6tttdrTt|ksTtdSN getresuid) r6r7uidsrBgetuidrDgeteuidhasattrr1r:rHrealZ effectiveZ_savedr>r>r? test_uids_s  zTestProcess.test_uidscCsXt}|\}}}|tks&t|tks6tttdrTt|ksTtdSr0) r6r7gidsrBgetgidrDgetegidr5 getresgidr6r>r>r? test_gidsms  zTestProcess.test_gidsc sfdd}tttdW5QRX}|||trd}tjtj tj tj tj tj fD]}|j|dvz|Wntjk rYnLX}|tj tj tj hkr||ks|dkr|}||kstn ||kstW5QRXqlnzttdr*ttjtks*tddksFtttdrrttjtksrttsddkstWntjk rYnXdS)Ncs*z|Wntjk r$YnXdSr4)nicer6ra)rrr>r?r|sz&TestProcess.test_nice..cleanupstr)prio getpriorityrfr)r6r7r+rErr>rr ZIDLE_PRIORITY_CLASSZBELOW_NORMAL_PRIORITY_CLASSZNORMAL_PRIORITY_CLASSZABOVE_NORMAL_PRIORITY_CLASSZHIGH_PRIORITY_CLASSZREALTIME_PRIORITY_CLASSsubTestrarDr5rBrA PRIO_PROCESSrCr)r:rrZ highest_prior@Znew_prior>rr? test_nice{s`       zTestProcess.test_nicecCst}|tjkstdSr4)r6r7r-ZSTATUS_RUNNINGrDrGr>r>r? test_statusszTestProcess.test_statuscCs||}|}trh|d\}}t}|dr>td||ksJt dt j krx|t j dksxt n|tksxt dS)N\$zrunning as service accountZ USERDOMAIN) r@usernamer splitgetpassgetuserendswithr+rrDrBenviron)r:rHrHdomainZ getpass_userr>r>r? test_usernames    zTestProcess.test_usernamecCs |}|tkstdSr4)r@cwdrBgetcwdrDrGr>r>r?test_cwdszTestProcess.test_cwdcs(tddg}||tfdddS)NrczFimport os, time; os.chdir('..'); [time.sleep(0.1) for x in range(100)]cstjtkSr4)rPrBrdirnamerQr>rr>r?z(TestProcess.test_cwd_2..)r r@r%)r:rjr>rr? test_cwd_2s  zTestProcess.test_cwd_2c Cst}|}|st|||j|ttdrL|tt|j ksLtt |t t |ksdttt t tj dd}|D]j}||g||gkstttdr|tt|j kstt|dr|d|kstq|gtr||jks(tn||ks(tttdrR|tt|j ksRttt|dW5QRX|||t ||t|dS)Nsched_getaffinityTZpercpunum_cpurrf)r6r7 cpu_affinityrDrr5rBlistrWr8rrrrrYr_procZ_get_eligible_cpusr+rErr)r:rHinitialZall_cpusnr>r>r?test_cpu_affinitys4         zTestProcess.test_cpu_affinityc Cs|}ttjdddg}tt||W5QRXtt|tddW5QRXtt |ddgW5QRXtt|ddgW5QRXdS) NTrX i'i*r1ry) r@rr6rr+rEr{rZrr)r:rHZ invalid_cpur>r>r?test_cpu_affinity_errs s    z"TestProcess.test_cpu_affinity_errscCst}|}|st|||j|t|dkrB|dd}g}tt|dD](}t||D]}|rf| t |qfqV|D]&}||t |t |kstqdS)N rf) r6r7rZrDrrr itertools combinationsappendr[sorted)r:rHr]ZcombosrZsubsetZcombor>r>r?"test_cpu_affinity_all_combinationss    z.TestProcess.test_cpu_affinity_all_combinationsz broken on BSDzunreliable on APPVEYORc s\t|}|ks$tt|dz}|d|tfddddD}t j ||ks~tt rD]}|j |kr|j dkstqW5QRXD]}t j |j st|qd|}|td |gtd D]0}d dD}||krq6td qt j ||ks6t|D]}t j |s:t|q:dS) NrsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcsttkSr4)r open_filesr>filesrHr>r?rT8rUz-TestProcess.test_open_files..cSsg|]}tj|jqSr>rBrrrr>r>r?r:sz/TestProcess.test_open_files..rzIimport time; f = open(r'%s', 'r'); [time.sleep(0.1) for x in range(100)];rcrcSsg|]}tj|jqSr>rlrr>r>r?rKsrt)r6r7rrirDrrflushr%rBrrrpositionisfiler@r rr}sleep)r:rr filenamesfilerrr>rjr?test_open_files,s<       zTestProcess.test_open_filesc Cst}tjj}|}t|d}|D]*}||j||jksR|j | kr,qnq,| dt |||j||jkst tr|j dkst n|j | kst |d}|d|jkst |d|j kst |j|kst W5QRXdS)Nwzno file found; files=%sryrrf)r6r7rBrrrrrirzfdfilenor~reprrDr )r:rHrrfileobjrrZntupler>r>r?test_open_files_2Us*    zTestProcess.test_open_files_2cCst}|}|}t|d}||j||dksBtt}||j||dksjt||||kstdS)Nrtrfr) r6r7rZnum_fdsrrcloserDsocket)r:rHrstartrrsockr>r>r? test_num_fdsts   zTestProcess.test_num_fdsz not reliable on OPENBSD & NETBSDcCsTt}t|}tdD](}tdt|}||krdSq|ddS)Nrg?z2num ctx switches still the same after 2 iterations)r6r7rZnum_ctx_switchesrr}rpr~)r:rHbeforerafterr>r>r?test_num_ctx_switchess    z!TestProcess.test_num_ctx_switchescCsFt}ttdr&|tks&t|}|tksBtdS)Ngetppid) r6r7r5rBppidrrDr@rCrGr>r>r? test_ppids  zTestProcess.test_ppidcCsD|}|jtksttd}t|dks@tdSr) r@parentr8rBrCrDr6pidsr7)r:rHZ lowest_pidr>r>r? test_parents zTestProcess.test_parentcCs8t}|\}}||ks$t||ks4tdSr4)r6r7rurrDr:rrvrwr>r>r?test_parent_multis zTestProcess.test_parent_multicCs`t}|st|\}}|d|ks4t|d|ksHt|d|ks\tdSr)r6r7parentsrDrurr>r>r? test_parentss   zTestProcess.test_parentscCst}|gkst|jddgks,t|jdd}|}|jdd}||fD]>}t|dksht|dj|jks|t|d|jksTtqTdS)NT recursiver) creationflagsrf)r6r7childrenrDr@rr8r)r:rrvZ children1Z children2rr>r>r? test_childrens   zTestProcess.test_childrencCsft}|\}}||gks&t|jdd||gks>t|||jddgksbtdS)NTr)r6r7rurrDrSrKrr>r>r?test_children_recursives z#TestProcess.test_children_recursivec Cstt}tD]4}z||d7<Wqtjk rDYqXqt|ddddd}t rz|dkrzt dt |}z|j dd }Wntjk rYnXt|tt|kstdS) NrfcSs|dS)Nrfr>)rr>r>r?rTrUz6TestProcess.test_children_duplicates..)keyryrzPID 0Tr) collections defaultdictrr6 process_iterrErrorrgitemsrr+rr7rrarrrD)r:tablerHr8cr>r>r?test_children_duplicatess     z$TestProcess.test_children_duplicatescCs|t}|\}}|jdd}t|dks0t|d|ks@t|d|ksPt|}|d|ksht|d|ksxtdS)NTrrrrf)r6r7rurrrDr)r:rrvrwrrr>r>r?test_parents_and_childrens  z%TestProcess.test_parents_and_childrencCsX|}|tdD] }|tjkr.q:tdq||tjksTt dS)Nrrt) r@rqrr-r6ZSTATUS_STOPPEDr}rprrrD)r:rHrr>r>r?test_suspend_resumes  zTestProcess.test_suspend_resumec CsDtttdW5QRXtttdW5QRXdS)Nrary)r+rErr6r7r{r:r>r>r?test_invalid_pids  zTestProcess.test_invalid_pidc Cst}|jddgd}t|ddgks0tttt}|jdgdd}t|dt sp|ddksptt j ddtj d "|jd gd dd d ikstW5QRXt j ddt |jdd ,ttj |jd gdW5QRXW5QRXt j ddt|jdd $|jd gddd diks0tW5QRXt j ddtd H|}d t |ksjttt|jd gdW5QRXW5QRXtt|dW5QRXtt|dgW5QRXtt|dd gW5QRXdS) Nrrz)attrsZnet_connectionsfoo)rZad_valuezpsutil.Process.niceT)creater\r>rfbar)r6r7as_dictrgkeysrDrrrr[r)r]rar9r8r+rEr%NotImplementedErrorrr{)r:rHdr>r>r? test_as_dictsR& " ( "   zTestProcess.test_as_dictc Cst}td8}|||W5QRX|jdksFtW5QRXtd}||W5QRX|jdkstdS)N$psutil._psplatform.Process.cpu_timesrfrr6r7r)r]oneshotrZ call_countrDr:rHrr>r>r? test_oneshot0s   zTestProcess.test_oneshotc Cst}td}tdj}|:|||||W5QRXW5QRX|jdksvt|jdkstW5QRXW5QRXtd}||W5QRX|jdkstdS)Nrz(psutil._psplatform.Process.oneshot_enterrfrr)r:rHm1m2rr>r>r?test_oneshot_twice=s    " zTestProcess.test_oneshot_twicec Cs|\}}|}|}||ks(t|&||ksBt||ksRtW5QRX|&||ksvt||kstW5QRXdSr4)rurrDr)r:p1Zp2Zp1_ppidZp2_ppidr>r>r?test_oneshot_cacheQs    zTestProcess.test_oneshot_cachecsnfdd}tr8tfddt}||jD]\}}|||qVdS)Ncsz |}WnTtjk r"Yn`tjk r6YnLtjk r^trX|dkrXYdSYn$Xtrp|dkrpdSd||fdS)N>rr>rzrz+%r didn't raise NSP and returned %r instead)r6r%r9rarr r~)funZfun_namerrr>r?assert_raises_nsphs    zFTestProcess.test_halfway_terminated_process..assert_raises_nspcsjtkSr4)r8r6rr>rr>r?rTrUz=TestProcess.test_halfway_terminated_process..) r@rSrKr r%rOr*iterall)r:rnsrrzr>)rHr:r?test_halfway_terminated_process`s  z+TestProcess.test_halfway_terminated_processcCs|\}}||dSr4)Z spawn_zombieZassertProcessZombie)r:Z_parentzombier>r>r?test_zombie_processs zTestProcess.test_zombie_processc CsBt}tjdtdd}|s*t|js4tW5QRXdS)Nzpsutil.Processrr[)r6r7r)r]r%rrDrrr>r>r?$test_zombie_process_is_running_w_excs z0TestProcess.test_zombie_process_is_running_w_excc CsHt}tjdtdd"}|tjks0t|js:tW5QRXdS)Nz!psutil._psplatform.Process.statusrr[) r6r7r)r]r%r-r.rDrrr>r>r? test_zombie_process_status_w_excsz,TestProcess.test_zombie_process_status_w_excc Cstrddlm}n ddlm}|}t|j}|j|df|_t t |jtj ksbt | rnt tjtjdd(t|}t t W5QRXW5QRXd|j|kst |jtj kst |t|jkst d}t|}|j|j|jdd D]D\}}|j|d (tjtj|d  |W5QRXW5QRXq d t|ksbt d t|kstt tjtj|d |W5QRXtjtj|d |W5QRXtjtj|d | W5QRXtjtj|d |!W5QRXdS) Nr)StringIOrZ PSUTIL_DEBUGTz-refreshing Process instance for reused PID %sz4process no longer exists and its PID has been reusedF) clear_cache)rzrzterminated + PID reused)"r iorr5r6r7r8r_identr[rZ_pmaprDrr)r]objectZ_commonrgetvaluer*rsettersZkillersrBr+rEr9r?rwrrrr) r:rZsubprHrmsgrrrzr>r>r?test_reused_pidsD      zTestProcess.test_reused_pidc CsdtkrVttjtdW5QRXtdrr2r9rHzNT AUTHORITY\SYSTEMrootrz)r6rr+rEr9r7Z pid_existsrDrr rar{rKrSrqrrrJrUrLrMr*rgettersrr7rHr)r:rHrrrrzrrr>r>r? test_pid_0sH            zTestProcess.test_pid_0cCsHdd}d|_t}||}|tj}tsDtrD||ksDtdS)NcSsNddddg}tr"|ddddg|D]}||dq&tdd |DS) NPLATHOMEZPYTEST_CURRENT_TESTZPYTEST_VERSIONZ__CF_USER_TEXT_ENCODINGZVERSIONER_PYTHON_PREFER_32_BITZVERSIONER_PYTHON_VERSIONcSs8g|]0\}}|dddd|ddddfqS) rZ )r)rkvr>r>r?r sz@TestProcess.test_environ..clean_dict..)rr$popdictr)rexcluderzr>r>r? clean_dicts z,TestProcess.test_environ..clean_dict) ZmaxDiffr6r7rMrBcopyr rrD)r:rrHZd1Zd2r>r>r? test_environs zTestProcess.test_environz #include 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)stdinrerUra3)ACr)textwrapdedentr'rr5rhrir6r7r8r2rrDrerrrrMra communicate returncode)r:rQZcexer=rHenvr>r>r?test_weird_environs(      zTestProcess.test_weird_environN)k__name__ __module__ __qualname____doc__r@rIrRrTrWr+markskipifr rbrkrrsrxr|rrrr"rrrrrrrr1rrrrr rrrrrrrrrrrr.r0rrrrrr rrrrr"rr&r)r r/r8r=rDrErOrRrVrr_rbrhrrrsryr~rrrrrrrrrrrrrrrrrrrrrrrrrrr>r>r>r?r3Os             ) +          .    0  B   &   &       4 &   .. r3csreZdZdZeedr&eZeZ fddZ fddZ fddZ d d Z ejjd d d ddZZS)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. r3csTtj||ddt|DD].}t||fdd}t||t||q dS)NcSsg|]}|dr|qS)testrrr>r>r?ras z0LimitedUserTestCase.__init__..cs&z Wntjk r YnXdSr4)r6rarmethr>r?test_ds z+LimitedUserTestCase.__init__..test_)r__init__rrsetattrtypes MethodType)r:r;r<attrr __class__rr?r]s   zLimitedUserTestCase.__init__cs"ttdtddS)Ni)rsetUprBsetegidseteuidrrr>r?rls  zLimitedUserTestCase.setUpcs&t|jt|jtdSr4)rBr PROCESS_UIDr PROCESS_GIDrtearDownrrr>r?rqs  zLimitedUserTestCase.tearDowncCs8ztdWntjk r(Yn X|ddS)Nryzexception not raised)r6r7r>rar~rr>r>r?rDvs zLimitedUserTestCase.test_niceTzcauses problem as rootrXcCsdSr4r>rr>r>r?r~sz'LimitedUserTestCase.test_zombie_process)rrrrr5rBr3rr:rrrrrDr+rrr __classcell__r>r>rr?rRs    rc@s4eZdZdZeddZddZddZdd Zd S) TestPopenzTests for psutil.Popen class.cCs tdSr4r,)clsr>r>r? tearDownClassszTestPopen.tearDownClassc Cstddg}tj|tjtjtdL}|||jt |sDt t t  |jW5QRX|W5QRXtr|dtj kst n|dtjkst dS)Nrc3import time; [time.sleep(0.1) for x in range(100)];stdoutrerrg)r r6Popenrhrir!rzrrrrDr+rErFrrSr rKrLrMr:rjprocr>r>r? test_miscs*  zTestPopen.test_miscc Cshtjtdgtjtjtjtd}|W5QRX|jjs>t |j jsJt |j jsVt |j dksdt dS)Nz-V)rrerrr) r6rr rhrir!rrclosedrDrerr)r:rr>r>r?test_ctx_managers   zTestPopen.test_ctx_managerc Cstddg}tj|tjtjtd}||t tj |W5QRXt tj | W5QRXt tj | t jW5QRXtrt tj | t jW5QRXt tj | t jW5QRXW5QRXdS)Nrcrr)r r6rrhrir!rSrKr+rEr9rJrUrLrMr Z CTRL_C_EVENTZCTRL_BREAK_EVENTrr>r>r?test_kill_terminates0zTestPopen.test_kill_terminateN) rrrr classmethodrrrrr>r>r>r?rs  r)Frrr_rJrdrBrLr{rr+rhrrr}rr6rrrrrrr r r Zpsutil._commonr Zpsutil._compatr rrrrZ psutil.testsrrrrrrrrrrrrrrr r!r"r#r$r%r&r'r(r)r*r+r-r.r/r0r1r2r3r3rrr>r>r>r?s                                                6