U Ã|ýfïùã@sdZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlmZddlmZddlmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd 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"mZ>dd/l"m?Z?dd0l"m@Z@dd1l"mAZAGd2d3„d3e4ƒZBeräe C¡dkräGd4d5„d5eBƒZDGd6d7„d7e4ƒZEeFd8krdd9lGmHZHeHeIƒdS):ú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©Ú reap_children)Úretry_on_failure)Úsh)Úskip_on_access_denied)Úskip_on_not_implemented)Ú wait_for_pidc@sPeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Ze   e d ¡d d„ƒZ dd„Z e   ed¡dd„ƒZdd„Zdd„Zdd„Zdd„Zdd„Ze   ed¡dd „ƒZe   ed¡d!d"„ƒZe   e d#¡d$d%„ƒZd&d'„Ze   e d(¡d)d*„ƒZe   e d#¡eed+d,d-„ƒƒZe   e d#¡e   e d.¡d/d0„ƒƒZ!e   e d#¡e   e" d1¡d2d3„ƒƒZ#e   e$ d#¡d4d5„ƒZ%e   e$ d#¡d6d7„ƒZ&e   e$ d#¡d8d9„ƒZ'e   e$ d#¡d:d;„ƒZ(e   e$ d#¡dd?„Z*e   e" d@¡dAdB„ƒZ+e   e, d#¡dCdD„ƒZ-e.ƒe/e0d+e   e, d#¡dEdF„ƒƒƒZ1e.ƒdGdH„ƒZ2dIdJ„Z3e   e4 d#¡dKdL„ƒZ5e   e4 d#¡dMdN„ƒZ6dOdP„Z7dQdR„Z8e   ed¡dSdT„ƒZ9dUdV„Z:e   e;dW¡dXdY„ƒZe   e?d`¡e   e@da¡e   e;dW¡e   edb¡dcdd„ƒƒƒƒZAe   e d(¡dedf„ƒZBe   e d(¡dgdh„ƒZCdidj„ZDe   ed¡dkdl„ƒZEdmdn„ZFdodp„ZGdqdr„ZHe   eI d#¡dsdt„ƒZJe   eI d#¡dudv„ƒZKe   eI d#¡dwdx„ƒZLe   eMdy¡e   eNdz¡d{d|„ƒƒZOe   eMdy¡e   eNdz¡d}d~„ƒƒZPe   e d(¡dd€„ƒZQeed+e   eRped¡d‚dƒ„ƒƒZSd„d…„ZTd†d‡„ZUdˆd‰„ZVe   ed¡e.ƒdŠd‹„ƒƒZWdŒd„ZXdŽd„ZYdd‘„ZZd’d“„Z[d”d•„Z\d–d—„Z]d˜d™„Z^dšd›„Z_dœd„Z`dždŸ„Zad d¡„Zbe   e d(¡d¢d£„ƒZce   e d(¡d¤d¥„ƒZde   e d(¡d¦d§„ƒZed¨d©„Zfdªd«„Zge   eh d#¡d¬d­„ƒZie   eh d#¡e   e d(¡e   ejd®¡e   ed¯¡d°d±„ƒƒƒƒZkd²S)³Ú TestProcessrcOsD|j||Ž}zt |j¡WStjk r>| |j¡‚YnXdS©N)Úspawn_testprocÚpsutilÚProcessÚpidÚ NoSuchProcessZ assertPidGone)ÚselfÚargsÚkwargsÚsproc©r>úL/opt/alt/python38/lib64/python3.8/site-packages/psutil/tests/test_process.pyÚ spawn_psprocRs   zTestProcess.spawn_psprocc Cs:t ¡}| |jt ¡¡| t¡ d|_W5QRXdS)Né!)r6r7Ú assertEqualr8ÚosÚgetpidÚ assertRaisesÚAttributeError©r:Úpr>r>r?Útest_pid\s zTestProcess.test_pidcCsJ| ¡}| ¡| ¡}tr,| |tj¡n| |tj ¡| |¡dSr4) r@ÚkillÚwaitr rBÚsignalÚSIGTERMÚSIGKILLÚassertProcessGone©r:rHÚcoder>r>r?Ú test_killbszTestProcess.test_killcCsJ| ¡}| ¡| ¡}tr,| |tj¡n| |tj ¡| |¡dSr4)r@Ú terminaterKr rBrLrMrOrPr>r>r?Útest_terminatelszTestProcess.test_terminatecCsXtr tjntj}| ¡}| |¡| ¡}tr<| ||¡n| || ¡|  |¡dSr4) r rLrNrMr@Ú send_signalrKr rBrO)r:ÚsigrHrQr>r>r?Útest_send_signalvs zTestProcess.test_send_signalz not POSIXc Cs‚tj}| ¡}tjdttjdƒd| t j |j |¡W5QRX| ¡}tjdttj dƒd| t j |j |¡W5QRXdS)Nzpsutil.os.killÚ©Ú side_effect)rLrMr@r*ÚpatchÚOSErrorÚerrnoZESRCHrEr6r9rUÚEPERMÚ AccessDenied)r:rVrHr>r>r?Útest_send_signal_mockeds ÿ ÿz#TestProcess.test_send_signal_mockedcCsÒtddg}| |¡}| ¡}| |d¡| |¡tddg}|j|tjd}| ¡}| |d¡| |¡tddg}| |¡}| ¡}| |d¡| |¡tdd g}| |¡}| ¡}| |d¡| |¡dS) Nú-cÚpassrz1 / 0)Ústderrézimport sys; sys.exit(5);ézimport os; os._exit(5);)r!r@rKrBrOÚ subprocessÚPIPE)r:ÚcmdrHrQr>r>r?Útest_wait_exiteds(              zTestProcess.test_wait_exitedzfails on NETBSDcCsê| ¡}tr‚| tj¡|jtj|jdd| tj ¡|jtj|jdd| tj ¡|  | ¡tj ¡|  | ¡tj ¡nd|  ¡|jtj|jdd|  ¡|jtj|jdd| ¡|  | ¡tj ¡|  | ¡tj ¡dS)Nçü©ñÒMbP?)Útimeout)r@r rUrLÚSIGSTOPrEr6ÚTimeoutExpiredrKÚSIGCONTrMrBÚsuspendÚresumerSrGr>r>r?Útest_wait_stopped«s    zTestProcess.test_wait_stoppedcCs’| ¡\}}| tj|jd¡| tj|jd¡| ¡| ¡| ¡}| ¡}trr| |tj ¡| |d¡n| |tj ¡| |tj ¡dS)Nç{®Gáz„?) Úspawn_children_pairrEr6rmrKrSr rBrLrM)r:ÚchildÚ grandchildZ child_retZgrandchild_retr>r>r?Útest_wait_non_childrenÁs z"TestProcess.test_wait_non_childrencCsH| ¡}| ¡| tj|jd¡| tj|jd¡| t|jd¡dS)Nrrréÿÿÿÿ)r@ÚnamerEr6rmrKÚ ValueErrorrGr>r>r?Útest_wait_timeoutÖs zTestProcess.test_wait_timeoutcCs¢| ¡}| tj|jd¡| ¡t ¡t}t ¡|krfz| d¡}WqpWq.tjk rbYq.Xq.| d¡‚t r†|  |t j ¡n|  |t j ¡| |¡dS)Nrrk)r@rEr6rmrKrJÚtimerÚfailr rBrLrNrMrO)r:rHZstop_atrQr>r>r?Útest_wait_timeout_nonblockingÝs    z)TestProcess.test_wait_timeout_nonblockingc Csxt ¡}|jdd|jddtdƒD](}|jdd}| |t¡| |d¡q(| t¡|jddW5QRXdS)Nrj)Úintervalédçrw) r6r7Ú cpu_percentÚrangeÚassertIsInstanceÚfloatÚassertGreaterEqualrEry)r:rHÚ_Úpercentr>r>r?Útest_cpu_percentðs      zTestProcess.test_cpu_percentc Cs4tjddd}t ¡ ¡|js&t‚W5QRXdS)Nzpsutil.cpu_count)Z return_value)r*r[r6r7rÚcalledÚAssertionError)r:Úmr>r>r?Útest_cpu_percent_numcpus_noneûs z)TestProcess.test_cpu_percent_numcpus_nonezQEMU user not supportedc Cs’t ¡ ¡}|jdkst|ƒ‚|jdks0t|ƒ‚|jdksBt|ƒ‚|jdksTt|ƒ‚trj|j dksjt|ƒ‚|j D]}t   dt   t||ƒ¡¡qpdS)Nr€z%H:%M:%S)r6r7Ú cpu_timesÚuserrŠÚsystemÚ children_userÚchildren_systemrZiowaitÚ_fieldsr{ÚstrftimeÚ localtimeÚgetattr)r:Útimesrxr>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)r6r7rrCr–ÚmaxÚminr|)r:Ú user_timeZ kernel_timeÚutimeZktimer>r>r?Útest_cpu_times_2s zTestProcess.test_cpu_times_2z not supportedcCsPt ¡}| ¡}| |d¡t ¡dkr4| |d¡| | ¡tt ¡ƒ¡dS©Nrrd)r6r7Zcpu_numr…Ú cpu_countrBÚassertInr‚)r:rHÚnumr>r>r?Ú test_cpu_nums    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)r@r{Ú create_timeÚabsr|r“r”)r:rHÚnowr¤Ú differencer>r>r?Útest_create_time%s ÿÿzTestProcess.test_create_timez POSIX onlycCs4t ¡ ¡}|dk r0tj tdƒ¡}| ||¡dS)NÚtty)r6r7ÚterminalrCÚpathÚrealpathr/rB)r:rªr©r>r>r?Ú test_terminal7s zTestProcess.test_terminal)Zonly_ifc Cs¨t ¡}| ¡}ttdƒ}| ¡W5QRX| ¡}ts„ts„| |j |j ¡|  |j |j ¡t r¤| |j |j ¡|  |j|j¡n | |j|j¡| |j|j¡| ¡}t| ¡dƒ.}trÖ| tdddƒ¡n| dd¡W5QRX| ¡}| |j |j ¡| |j|j¡| |j |j ¡| |j|j¡t r\| |j|j¡| |j |j ¡tt|ƒƒD]:}tr€|dkr€qh| ||d¡| ||d¡qhdS)NÚrbÚwbÚxi@BÚasciir˜r)r6r7Z io_countersÚopenr!ÚreadrrÚ assertGreaterZ read_countrBZ write_countrZ read_charsZ write_charsr…Ú read_bytesÚ write_bytesÚ get_testfnrÚwriteÚbytesr‚Úlen)r:rHZio1ÚfZio2Úir>r>r?Útest_io_counters>s> zTestProcess.test_io_countersz linux onlyc sÞ‡fdd„}t ¡‰ts.| ˆ ¡dtj¡| tjd¡| tjd¡| tjd¡| tjd¡ˆ ¡}|  ||¡ˆ tj¡| t ˆ ¡ƒtjdf¡|  t ¡ˆjtjddW5QRXˆ tj¡| t ˆ ¡ƒtjdf¡ˆjtjdd| t ˆ ¡ƒtjdf¡|  t ¡ˆjtjd dW5QRXzˆjtjddWntj k rhYnX| t d ¡ˆ tjd¡W5QRX| t d ¡ˆ tjd¡W5QRX| t d ¡ˆjddW5QRXdS) Ncs&|\}}|tjkrd}ˆ ||¡dS©Nr)r6ÚIOPRIO_CLASS_NONEÚionice)ÚinitZioclassÚvalue©rHr>r?Úcleanupls z.TestProcess.test_ionice_linux..cleanuprrdr˜éé©rÂézioclass accepts no valuez$'ioclass' argument must be specified)r6r7rrBrÀr¿ZIOPRIO_CLASS_RTZIOPRIO_CLASS_BEZIOPRIO_CLASS_IDLEÚ addCleanupÚtuplerEryr_ÚassertRaisesRegex)r:rÄrÁr>rÃr?Útest_ionice_linuxisB      ÿzTestProcess.test_ionice_linuxz!not supported on this win versionc Csþt ¡}ts| | ¡tj¡| ¡}| |j|¡| tj¡| | ¡tj¡| tj¡| | ¡tj¡z| tj ¡Wntj k r–YnX| | ¡tj ¡|  t d¡|jtjddW5QRX|  t d¡| tj d¡W5QRXdS)Nz&value argument not accepted on WindowsrdrÇzis not a valid priority)r6r7rrBrÀZ IOPRIO_NORMALrÉZIOPRIO_VERYLOWZ IOPRIO_LOWZ IOPRIO_HIGHr_rËÚ TypeErrorry)r:rHrÁr>r>r?Útest_ionice_win–s*  ÿzTestProcess.test_ionice_wincCsÐddl}t t ¡¡}dd„ttƒDƒ}|s4t|ƒ‚|D]’}tt|ƒ}| |d¡|t|ƒkr|  |t||ƒ¡t rvq8|  |  |¡|  |¡¡q8|  |¡}|  t |ƒd¡| |dd¡| |dd¡q8dS)NrcSsg|]}| d¡r|‘qS)ZRLIMIT©Ú startswith©Ú.0r°r>r>r?Ú ·s z/TestProcess.test_rlimit_get..r˜rwrd)Úresourcer6r7rCrDÚdirrŠr•r…rBr ÚrlimitZ getrlimitrº)r:rÔrHÚnamesrxrÂÚretr>r>r?Útest_rlimit_get²s      zTestProcess.test_rlimit_getc Cs€| ¡}| tjd¡| | tj¡d¡trX| td¡tj  d¡ d¡W5QRX|  t¡| tjd¡W5QRXdS)N)rerezcan't use prlimitr)rerere) r@rÖr6Z RLIMIT_NOFILErBrrËryZ _psplatformr7rErGr>r>r?Útest_rlimit_setÊs zTestProcess.test_rlimit_setc CsÞt ¡}| ¡}| tj¡\}}zŒ| tjd|f¡t|dƒ}| d¡W5QRX| t ¡&}t|dƒ}| d¡W5QRXW5QRX| t rš|j j n|j dt j ¡W5| tj||f¡| | tj¡||f¡XdS)Nér¯sXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXsXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr)r6r7r·rÖÚ RLIMIT_FSIZErBr²r¸rEÚIOErrorrÚ exceptionr]ZEFBIG)r:rHÚtestfnÚsoftÚhardr»Úexcr>r>r?Ú test_rlimit×s    ÿzTestProcess.test_rlimitc Cs˜t ¡}| tj¡\}}zN| tjd|f¡| tjtj|f¡t| ¡dƒ}| d¡W5QRXW5| tj||f¡| | tj¡||f¡XdS)NrÛr¯sXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX) r6r7rÖrÜrBÚ RLIM_INFINITYr²r·r¸)r:rHràrár»r>r>r?Útest_rlimit_infinityìsz TestProcess.test_rlimit_infinitycCs<t ¡}| tj¡\}}| tj|¡| tj||f¡dSr4)r6r7rÖrÜrBrä)r:rHràrár>r>r?Útest_rlimit_infinity_valueûsz&TestProcess.test_rlimit_infinity_valuec Csrt ¡}trr>r?Útest_num_threadss zTestProcess.test_num_threadsz WINDOWS onlycCst ¡}| | ¡d¡dSr¾)r6r7r´Z num_handlesrGr>r>r?Útest_num_handlesszTestProcess.test_num_handlesc Cs¸t ¡}trr>r?Ú test_threadss zTestProcess.test_threadscCsŽ| ¡}tr:z | ¡Wn tjk r8t d¡‚YnX|j| ¡j t dd„| ¡Dƒƒdd|j| ¡j t dd„| ¡DƒƒdddS)NrçcSsg|] }|j‘qSr>)rœrÑr>r>r?rÓ>sz.TestProcess.test_threads_2..r™)ÚdeltacSsg|] }|j‘qSr>)rñrÑr>r>r?rÓCs) r@rrïr6r_rérêZassertAlmostEqualrrŽÚsumrrGr>r>r?Útest_threads_22s  ýýzTestProcess.test_threads_2c CsÞt ¡}| ¡dd…\}}| ¡}| |d¡| |d¡dgd}| ¡dd…\}}| ¡}| ||¡| ||¡| ||¡~tr´| ¡} | | j| j ¡| | j | j ¡| ¡} | j D]} | t | | ƒd¡qÂdS)Nr˜ri`ã)r6r7Z memory_infoÚmemory_percentr´r…r rBZrssZwsetÚvmsZpagefiler’r•) r:rHZrss1Zvms1Zpercent1ZmemarrZrss2Zvms2Zpercent2Úmemrxr>r>r?Útest_memory_infoGs&       zTestProcess.test_memory_infocCsªt ¡}t ¡j}| ¡}|jD]J}t||ƒ}|j|d||fd|dkrNts t rTq |j |||||fdq t sxt sxt r†| |j d¡t r¦| |jd¡| |jd¡dS)Nr)Úmsgr÷)r6r7Zvirtual_memoryÚtotalZmemory_full_infor’r•r…r rZassertLessEqualr rÚussZpssZswap)r:rHrûrørxrÂr>r>r?Útest_memory_full_infofs    z!TestProcess.test_memory_full_infoc Cs°t ¡}| ¡}| t|ƒtt|ƒƒ¡|jdd}|D]}|j d¡s8trZd|jkrZq8t j  |j¡srt |jƒ‚t rìz*t j  |j¡sžt j |j¡sžt |jƒ‚WnHt k rèts¸‚n,tdƒ}| ¡}W5QRXd|j|krä‚YnXq8dt j |j¡kr8zt  |j¡}Wntk r$Yq8Xt |j¡s8t |jƒ‚q8|D]h}|jD]Z}t||ƒ} |dkrhqL|d kr‚| s¤t | ƒ‚n"| | ttf¡| d ksLt | ƒ‚qLqBdS) NF)Úgroupedú[z /bin/qemu-z/proc/self/smapsz %s (deleted)Z64r«)ÚaddrZpermsr)r6r7Ú memory_mapsrBrºÚsetr«rÐr#rCÚisabsrŠr ÚexistsÚislinkrr r³ÚbasenameÚstatrÚS_ISREGÚst_moder’r•rƒÚintr) r:rHÚmapsZext_mapsÚntr»ÚdataÚstÚfnamerÂr>r>r?Útest_memory_mapsvsL   ÿþ      zTestProcess.test_memory_mapsc sLt ¡}tƒ4}dd„‰‡fdd„| ¡Dƒ}| ˆ|ƒ|¡W5QRXdS)NcSstj tj |¡¡Sr4)rCr«r¬ÚnormcaserÃr>r>r?Únormpath¬sz8TestProcess.test_memory_maps_lists_lib..normpathcsg|]}ˆ|jƒ‘qSr>)r«rÑ©rr>r?rÓ¯sz:TestProcess.test_memory_maps_lists_lib..)r6r7r'rr¡)r:rHr«Zlibpathsr>rr?Útest_memory_maps_lists_lib¦s z&TestProcess.test_memory_maps_lists_libcCs>t ¡}| ¡|jt|jddts.ts.tr:|jdddS)Nz?!?)Zmemtyperü)r6r7rörEryrrr rGr>r>r?Útest_memory_percent²s  zTestProcess.test_memory_percentcCsL| ¡}| ¡st‚| ¡s t‚| ¡| ¡| ¡rr>r?Útest_is_running¹s   zTestProcess.test_is_runningc CsÔ| ¡}| ¡}z| |t¡Wn”tk r´trbt|ƒttƒkrbtjj }| ||ƒ|tƒ¡nNdt j dt j df}z | |  |d¡t  |d¡¡Wntk r®YnXYnXt |ddgƒ}| |d¡dS)Nz%s.%srrdrXrazimport os; print('hey')Zhey)r@ÚexerBr!rŠr rºrCr«rÚsysÚ version_infoÚreplacer/)r:rHrrÚverÚoutr>r>r?Útest_exeÂs$ ÿ zTestProcess.test_execCsètddg}| |¡}tr.| ¡gkr.t d¡‚ts:ts:trP| | ¡dt¡n”t rœt rœ| ¡d}|tkrœ| d  | ¡dd…¡d  |dd…¡¡dSt rÈ| d  | ¡dd…¡d  |¡¡dS| d  | ¡¡d  |¡¡dS)Nraú2import time; [time.sleep(0.1) for x in range(100)]úOPENBSD: returned EBUSYrú rdr˜) r!r@rÚcmdlinerérêrrrBrrÚjoinr#)r:r"rHÚpyexer>r>r?Ú test_cmdlineàs*ý    ÿ$zTestProcess.test_cmdlinezbroken on PYPYcCs¶tg}| dgd¡| ddg¡| |¡}trjz| | ¡|¡Wq²tjk rft  d¡‚Yq²XnHt rˆ| | ¡dd…|¡n*| ¡}t r¦|gkr¦t  d¡‚| ||¡dS)Nz-vé2rarz#OPENBSD: process turned into zombier˜r ) r!Úextendr@rrBr"r6Ú ZombieProcessrérêr#r)r:r"rHrØr>r>r?Útest_long_cmdlines"ÿ   zTestProcess.test_long_cmdlinecCsH| ¡}| ¡ ¡}tj tj tj¡¡ ¡}|  |¡sDt ||fƒ‚dSr4) r@rxÚlowerrCr«rr¬rÚ executablerÐrŠ)r:rHrxr$r>r>r?Ú test_names zTestProcess.test_namezunreliable on PYPYzunreliable on QEMU usercCs¤t|jddƒ}|ddg}| |¡}trˆz| | ¡tj |¡¡Wq t k r„|  ¡t j kr~tj |¡  | ¡¡s€t ‚n‚Yq Xn| | ¡tj |¡¡dS)NZ01234567890123456789©Úsuffixrar)r)r·r@rrBrxrCr«rrŠÚstatusr6Ú STATUS_ZOMBIErЩr:r$r"rHr>r>r?Útest_long_namesý  zTestProcess.test_long_namezbroken on SUNOSz broken on AIXzbroken on QEMU usercCspt|jddƒ}|ddg}| |¡}| | ¡|¡| | ¡tj |¡¡| tj  |  ¡¡tj  |¡¡dS)Nz foo bar )r-rar) r)r·r@rBr"rxrCr«rrrr1r>r>r?Útest_prog_w_funky_name;sý z"TestProcess.test_prog_w_funky_namecCsXt ¡}| ¡\}}}| |t ¡¡| |t ¡¡ttdƒrT| t ¡| ¡¡dS©NÚ getresuid) r6r7ÚuidsrBrCÚgetuidÚgeteuidÚhasattrr5©r:rHÚrealZ effectiveZ_savedr>r>r?Ú test_uidsNs  zTestProcess.test_uidscCsXt ¡}| ¡\}}}| |t ¡¡| |t ¡¡ttdƒrT| t ¡| ¡¡dSr4) r6r7ÚgidsrBrCÚgetgidÚgetegidr9Ú getresgidr:r>r>r?Ú test_gids\s  zTestProcess.test_gidsc sœ‡fdd„}t ¡‰| tˆjd¡ˆ ¡}| ||¡trìd}tjtjtj tj tj tj fD]Œ}|j |dvzˆ |¡Wntjk r’YnLXˆ ¡}|tj tj tj fkrÒ||ksÀ|dkrÞ|}| ||¡n | ||¡W5QRXq\n¬z’ttdƒr| t tjt ¡¡ˆ ¡¡ˆ d¡| ˆ ¡d¡ttdƒr\| t tjt ¡¡ˆ ¡¡ts|ˆ d¡| ˆ ¡d¡Wntjk r–YnXdS)Ncs*zˆ |¡Wntjk r$YnXdSr4)Únicer6r_)rÁrÃr>r?rÄksz&TestProcess.test_nice..cleanupÚstr)ÚprioÚ getpriorityrdr)r6r7rErÍrBrÉr ZIDLE_PRIORITY_CLASSZBELOW_NORMAL_PRIORITY_CLASSZNORMAL_PRIORITY_CLASSZABOVE_NORMAL_PRIORITY_CLASSZHIGH_PRIORITY_CLASSZREALTIME_PRIORITY_CLASSÚsubTestr_rBr9rCrEÚ PRIO_PROCESSrDr)r:rÄrÁZ highest_priorDZnew_prior>rÃr?Ú test_nicejs^  úý ÿ  ÿ zTestProcess.test_nicecCst ¡}| | ¡tj¡dSr4)r6r7rBr/ZSTATUS_RUNNINGrGr>r>r?Ú test_status©szTestProcess.test_statuscCs|| ¡}| ¡}trh| d¡\}}t ¡}| d¡r>t d¡‚|  ||¡dt j krx|  |t j d¡n|  |t ¡¡dS)Nú\ú$zrunning as service accountZ USERDOMAIN) r@Úusernamer ÚsplitÚgetpassÚgetuserÚendswithrérêrBrCÚenviron)r:rHrLÚdomainZ getpass_userr>r>r?Ú test_username®s    zTestProcess.test_usernamecCs | ¡}| | ¡t ¡¡dSr4)r@rBÚcwdrCÚgetcwdrGr>r>r?Útest_cwd¿szTestProcess.test_cwdcCs$tddg}| |¡}t|jdƒdS)NrazFimport os, time; os.chdir('..'); [time.sleep(0.1) for x in range(100)]z#ret == os.path.dirname(os.getcwd()))r!r@r&rT)r:rhrHr>r>r?Ú test_cwd_2Ãs ü zTestProcess.test_cwd_2cCs†t ¡}| ¡}|st|ƒ‚| |j|¡ttdƒrL| |tt  |j ¡ƒ¡| t |ƒt t |ƒƒ¡tt t tjddƒƒƒ}|D]j}| |g¡| | ¡|g¡ttdƒrÈ| | ¡tt  |j ¡ƒ¡t|dƒr€| | ¡d| ¡¡q€| g¡tr| | ¡|j ¡¡n| | ¡|¡ttdƒrL| | ¡tt  |j ¡ƒ¡| t|jd¡| |¡| t |ƒ¡| t|ƒ¡dS)NÚsched_getaffinityT©ZpercpuÚnum_cpurrd)r6r7Ú cpu_affinityrŠrÉr9rCrBÚlistrXr8rºrr‚rrZrÚ_procZ_get_eligible_cpusrErÍrÊ)r:rHÚinitialZall_cpusÚnr>r>r?Útest_cpu_affinityÏs>    ÿ   ÿ zTestProcess.test_cpu_affinitycCsp| ¡}ttjddƒdg}| t|j|¡| t|jtddƒ¡| t|jddg¡| t|jddg¡dS) NTrYé i'iø*rÚ1rw) r@rºr6rrEryr[r‚rÍ)r:rHZ invalid_cpur>r>r?Útest_cpu_affinity_errsùs z"TestProcess.test_cpu_affinity_errscCs°t ¡}| ¡}|st|ƒ‚| |j|¡t|ƒdkrB|dd…}g}tt|ƒdƒD](}t ||¡D]}|rf|  t |ƒ¡qfqV|D]&}| |¡|  t | ¡ƒt |ƒ¡q„dS)Né rd) r6r7r[rŠrÉrºr‚Ú itertoolsÚ combinationsÚappendr\rBÚsorted)r:rHr^Zcombosr¼ZsubsetZcombor>r>r?Ú"test_cpu_affinity_all_combinationss    z.TestProcess.test_cpu_affinity_all_combinationsz broken on BSDzunreliable on APPVEYORc CsTt ¡}| ¡}| ¡}| ||¡t|dƒt}| d¡| ¡t|jdt |ƒƒ}dd„|Dƒ}|  t j   |¡|¡trž|D]}|j |kr€| |jd¡q€W5QRX|D]}t j  |j ¡s¬t|ƒ‚q¬d|}| td|g¡}td ƒD]0}d d„| ¡Dƒ}||krq.t d ¡qè|  t j   |¡|¡|D]}t j  |¡s2t|ƒ‚q2dS) Nr¯sxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzlen(ret) != %icSsg|]}tj |j¡‘qSr>©rCr«rrÑr>r>r?rÓ$sz/TestProcess.test_open_files..rÛzIimport time; f = open(r'%s', 'r'); [time.sleep(0.1) for x in range(100)];rarcSsg|]}tj |j¡‘qSr>rjrÑr>r>r?rÓ5srr)r6r7r·Ú open_filesÚ assertNotInr²r¸Úflushr&rºr¡rCr«rrrBÚpositionÚisfilerŠr@r!r‚r{Úsleep) r:rHrßÚfilesr»Ú filenamesÚfiler"r°r>r>r?Útest_open_filess:    ÿÿ   zTestProcess.test_open_filesc Csüt ¡}tjj}| ¡}t|dƒÐ}| ¡D]*}||jƒ||jƒksR|j |  ¡kr,qnq,|  dt | ¡ƒ¡‚|  ||jƒ||jƒ¡trš|  |j d¡n|  |j |  ¡¡| ¡d}|  |d|j¡|  |d|j ¡| |j| ¡¡W5QRXdS)NÚwzno file found; files=%srwrrd)r6r7rCr«rr·r²rkrxÚfdÚfilenor|ÚreprrBr rl)r:rHrrßÚfileobjrsZntupler>r>r?Útest_open_files_2?s*  ÿ þÿ zTestProcess.test_open_files_2cCsŽt ¡}| ¡}| ¡}t|dƒ}| |j¡| | ¡|d¡t ¡}| |j¡| | ¡|d¡| ¡| ¡| | ¡|¡dS)Nrurdr˜) r6r7r·Znum_fdsr²rÉÚcloserBÚsocket)r:rHrßÚstartrsÚsockr>r>r?Ú test_num_fds^s   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)r6r7rôZnum_ctx_switchesr‚r{rpr|)r:rHÚbeforer†Úafterr>r>r?Útest_num_ctx_switchesms    z!TestProcess.test_num_ctx_switchescCsFt ¡}ttdƒr&| | ¡t ¡¡| ¡}| | ¡t ¡¡dS)NÚgetppid) r6r7r9rCrBÚppidrƒr@rDrGr>r>r?Ú test_ppidys  zTestProcess.test_ppidcCsB| ¡}| | ¡jt ¡¡t ¡d}| t  |¡ ¡¡dSr¾) r@rBÚparentr8rCrDr6ÚpidsZ assertIsNoner7)r:rHZ lowest_pidr>r>r?Ú test_parent€s zTestProcess.test_parentcCs8t ¡}| ¡\}}| | ¡|¡| | ¡|¡dSr4)r6r7rsrBr†©r:r†rtrur>r>r?Útest_parent_multi‡s zTestProcess.test_parent_multicCs`t ¡}| ¡st‚| ¡\}}| | ¡d|¡| | ¡d|¡| | ¡d|¡dSrŸ)r6r7ÚparentsrŠrsrBr‰r>r>r?Ú test_parentss   zTestProcess.test_parentscCs˜t ¡}| | ¡g¡| |jddg¡|jdd}| ¡}|jdd}||fD]>}| t|ƒd¡| |dj|j¡| |d ¡|j¡qTdS)NT©Ú recursiver)Ú creationflagsrd)r6r7rBÚchildrenr@rºr8r„)r:r†rtZ children1Z children2rr>r>r?Ú test_children—s   zTestProcess.test_childrencCsft ¡}| ¡\}}| | ¡|g¡| |jdd||g¡| ¡| ¡| |jddg¡dS)NTr)r6r7rsrBrrSrKr‰r>r>r?Útest_children_recursive¦s z#TestProcess.test_children_recursivec CsÈt t¡}t ¡D]4}z|| ¡d7<Wqtjk rDYqXqt| ¡dd„ddd}t rz|dkrzt   d¡‚t  |¡}z|j dd }Wntjk rªYnX| t|ƒtt|ƒƒ¡dS) NrdcSs|dS)Nrdr>)r°r>r>r?Ú¼óz6TestProcess.test_children_duplicates..)ÚkeyrwrzPID 0Tr)Ú collectionsÚ defaultdictr r6Ú process_iterr„ÚErrorrhÚitemsrrérêr7rr_rBrºr)r:ÚtablerHr8Úcr>r>r?Útest_children_duplicates³s     z$TestProcess.test_children_duplicatescCs|t ¡}| ¡\}}|jdd}| t|ƒd¡| |d|¡| |d|¡| ¡}| |d|¡| |d|¡dS)NTrr˜rrd)r6r7rsrrBrºr‹)r:r†rtrurr‹r>r>r?Útest_parents_and_childrenÇs  z%TestProcess.test_parents_and_childrencCsX| ¡}| ¡tdƒD] }| ¡tjkr.q:t d¡q| ¡|  | ¡tj¡dS)Nrrr) r@ror‚r/r6ZSTATUS_STOPPEDr{rprpÚassertNotEqual)r:rHr†r>r>r?Útest_suspend_resumeÔs  zTestProcess.test_suspend_resumecCs$| ttjd¡| ttjd¡dS)Nrbrw)rErÍr6r7ry©r:r>r>r?Útest_invalid_pidÞszTestProcess.test_invalid_pidc Csît ¡}|jddgd}| t| ¡ƒddg¡t tt ¡ƒ¡}|jdgdd}t|dt ƒsp| |dd¡t j ddtj d "| |jd gd dd d i¡W5QRXt j ddt  |jd¡d |jtj |jd gdW5QRXt j ddt |jd¡d "| |jd gddd di¡W5QRXt j ddtd F| ¡}| d t | ¡ƒ¡| t¡|jd gdW5QRXW5QRX| t¡| d¡W5QRX| t¡| dg¡W5QRX| t¡| dd g¡W5QRXdS) Nrrx)ÚattrsZnet_connectionsÚfoo)r£Zad_valuezpsutil.Process.niceT)ÚcreaterZrBrdÚbar)r6r7Úas_dictrBrhÚkeysr›r‡Ú isinstancer\r*r[r_r9r8rEr(ÚNotImplementedErrorrlrÍry)r:rHÚdr>r>r?Ú test_as_dictâs\ÿÿ ý  ýÿÿ "   zTestProcess.test_as_dictc Csˆt ¡}t d¡8}| ¡| ¡| ¡W5QRX| |jd¡W5QRXt d¡}| ¡| ¡W5QRX| |jd¡dS)Nú$psutil._psplatform.Process.cpu_timesrdr˜©r6r7r*r[ÚoneshotrrBZ call_count©r:rHr‹r>r>r?Ú test_oneshots   zTestProcess.test_oneshotc CsÐt ¡}t d¡€}t d¡j}| ¡:| ¡| ¡| ¡| ¡| ¡W5QRXW5QRX| |jd¡| |jd¡W5QRXW5QRXt d¡}| ¡| ¡W5QRX| |jd¡dS)Nr­z(psutil._psplatform.Process.oneshot_enterrdr˜r®)r:rHÚm1Úm2r‹r>r>r?Útest_oneshot_twice&s    " zTestProcess.test_oneshot_twicec Cs”| ¡\}}| ¡}| ¡}| ||¡| ¡&| | ¡|¡| | ¡|¡W5QRX| ¡&| | ¡|¡| | ¡|¡W5QRXdSr4)rsr„rŸr¯rB)r:Úp1Úp2Zp1_ppidZp2_ppidr>r>r?Útest_oneshot_cache:s    zTestProcess.test_oneshot_cachecsp‡fdd„}ˆ ¡}| ¡| ¡tr:ttjd|jƒˆ |¡t |ƒ}|  |j ¡D]\}}|||ƒqXdS)Ncs†z |ƒ}WnTtjk r"‚Yn`tjk r6YnLtjk r^trX|dkrXYdS‚Yn$Xtrp|dkrpdSˆ d||f¡‚dS)N)rïrè)rrxz+%r didn't raise NSP and returned %r instead)r6r(r9r_rr r|)ÚfunZfun_namerØr¡r>r?Úassert_raises_nspQs    ÿzFTestProcess.test_halfway_terminated_process..assert_raises_nspz %s not in ret) r@rSrKr r&r6r‡r8rOr+ÚiterÚall)r:r¹rHÚnsr¸rxr>r¡r?Útest_halfway_terminated_processIs  z+TestProcess.test_halfway_terminated_processcCs| ¡\}}| |¡dSr4)Z spawn_zombieZassertProcessZombie)r:Ú_parentÚzombier>r>r?Útest_zombie_processos zTestProcess.test_zombie_processc CsBt ¡}tjdt d¡d}| ¡s*t‚|js4t‚W5QRXdS)Nzpsutil.ProcessrrY)r6r7r*r[r(rrŠr‰r°r>r>r?Ú$test_zombie_process_is_running_w_exctsÿ z0TestProcess.test_zombie_process_is_running_w_excc CsHt ¡}tjdt d¡d"}| | ¡tj¡|js:t ‚W5QRXdS)Nz!psutil._psplatform.Process.statusrrY) r6r7r*r[r(rBr/r0r‰rŠr°r>r>r?Ú test_zombie_process_status_w_excsþz,TestProcess.test_zombie_process_status_w_excc CsŠtrddlm}n ddlm}| ¡}t |j¡}|j| ¡df|_t t  ¡ƒ|  |jtj ¡|  ¡rnt‚t|ƒƒ}t t  ¡ƒW5QRX|  d|j| ¡¡| |jtj ¡|t |j¡ksÊt‚d}t|ƒ}|j|j|jddD]0\}}|j|d| tj||¡W5QRXqì|  d t|ƒ¡|  d t|ƒ¡| tj||j¡| tj||j¡| tj||j¡| tj||j¡dS) Nr)ÚStringIOrz-refreshing Process instance for reused PID %sz4process no longer exists and its PID has been reusedF)Ú clear_cache)rxzterminated + PID reused)rÚiorÃr5r6r7r8r¤Ú_identr\r˜r¡Z_pmaprrŠrÚgetvaluerlr+rºÚsettersZkillersrFrËr9rCrxr„r†r‹r) r:rÃZsubprHr»rúr¼r¸rxr>r>r?Útest_reused_pid‹s8     þzTestProcess.test_reused_pidc Cs~dt ¡krF| tjtjd¡t d¡r,t‚| t d¡ ¡d¡dSt d¡}t rZtj nt }| ||j ¡| ||j ¡| ||j¡| ||j¡| ||j¡| ||jtj¡t|ƒ}| |j|j¡D]‚\}}z |ƒ}Wntj k røYqÐX|dkr| |jd¡qÐ|dkr>t r(dnd}| | ¡|¡qÐ|dkrÐ|sÐt|ƒ‚qÐtsz| dt ¡¡t d¡szt‚dS)Nrrd)r6r=rLzNT AUTHORITY\SYSTEMÚrootrx)r6r‡rEr9r7Z pid_existsrŠrBr„r r_ryrKrSrorprJrUrLrMr+rºÚgettersrÈr;rLrr¡)r:rHrâr¼r¸rxrØrŽr>r>r?Ú test_pid_0³s:     zTestProcess.test_pid_0cCsHdd„}d|_t ¡}|| ¡ƒ}|tj ¡ƒ}tsDtrD| ||¡dS)NcSsV| dd¡| dd¡tr@| dd¡| dd¡| dd¡tdd„| ¡DƒƒS)NÚPLATÚHOMEZ__CF_USER_TEXT_ENCODINGZVERSIONER_PYTHON_PREFER_32_BITZVERSIONER_PYTHON_VERSIONcSs8g|]0\}}| dd¡ dd¡| dd¡ dd¡f‘qS)ú rXÚ )r)rÒÚkÚvr>r>r?rÓäsýþz@TestProcess.test_environ..clean_dict..)ÚpoprÚdictrš)r«r>r>r?Ú clean_dictÜs     ûz,TestProcess.test_environ..clean_dict) ZmaxDiffr6r7rQrCÚcopyr rrB)r:rÕrHZd1Zd2r>r>r?Ú test_environÚs 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)Ústdinrcr”rbÚ3)ÚAÚCr)ÚtextwrapÚdedentr(r·r5rfrgr6r7r8r2rrŠrBrcr³rrrQr_Ú communicateÚ returncode)r:rQZcexer=rHÚenvr>r>r?Útest_weird_environós( ÿ     zTestProcess.test_weird_environN)lÚ__name__Ú __module__Ú __qualname__Ú__doc__r@rIrRrTrWréÚskipIfr r`rirrqrvrzr}rˆrŒr#r—ržrr£r¨r­rr1rr½rrÌr rÎrrÙrÚrãrårærírîrròr.r0rrõrùrýrrrrrrr%r r)r,r2r rr3r<rArHrIrSrVrWrr`rcrirrrtrzrrr‚r…rˆrŠrŒr‘r’rržr r¢r¬r±r´r·r½rÀrÁrÂrÉrÌrr×rrár>r>r>r?r3Os                )   +                    /               ?    )       %           7 &     ('    þ r3csneZdZdZeedƒr&e ¡Ze ¡Z ‡fdd„Z ‡fdd„Z ‡fdd„Z d d „Z e d d ¡d d„ƒ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. r7csTtƒj||Ždd„t|ƒDƒD].}t||ƒ‰‡fdd„}t||t ||¡ƒq dS)NcSsg|]}| d¡r|‘qS)ÚtestrÏrÑr>r>r?rÓ8s z0LimitedUserTestCase.__init__..cs&z ˆƒWntjk r YnXdSr4)r6r_r¡©Úmethr>r?Útest_;s z+LimitedUserTestCase.__init__..test_)rÚ__init__rÕr•ÚsetattrÚtypesÚ MethodType)r:r;r<Úattrrë©Ú __class__rér?rì4s   zLimitedUserTestCase.__init__cs"tƒ ¡t d¡t d¡dS)Niè)rÚsetUprCÚsetegidÚseteuidr¡rñr>r?róCs  zLimitedUserTestCase.setUpcs&t |j¡t |j¡tƒ ¡dSr4)rCrôÚ PROCESS_UIDrõÚ PROCESS_GIDrÚtearDownr¡rñr>r?røHs  zLimitedUserTestCase.tearDowncCs8zt ¡ d¡Wntjk r(Yn X| d¡‚dS)Nrwzexception not raised)r6r7rBr_r|r¡r>r>r?rHMs zLimitedUserTestCase.test_nicerdzcauses problem as rootcCsdSr4r>r¡r>r>r?rÀUsz'LimitedUserTestCase.test_zombie_process)rârãrärår9rCr7rör>r÷rìrórørHrérærÀÚ __classcell__r>r>rñr?rç)s     rçc@s4eZdZdZedd„ƒZdd„Zdd„Zdd „Zd S) Ú TestPopenzTests for psutil.Popen class.cCs tƒdSr4r,)Úclsr>r>r?Ú tearDownClassbszTestPopen.tearDownClassc Csœtddg}tj|tjtjtdB}| ¡| ¡|j|  t |ƒ¡|  t t |d¡| ¡W5QRXtr„| | d¡tj ¡n| | d¡tj¡dS)Nraú3import time; [time.sleep(0.1) for x in range(100)];©Ústdoutrcràr¤re)r!r6ÚPopenrfrgr"rxrrØÚ assertTruerÕrErFr•rSr rBrKrLrM©r:rhÚprocr>r>r?Ú test_miscfs(ýüzTestPopen.test_miscc Cshtjtdgtjtjtjtd}| ¡W5QRX|jjs>t ‚|j jsJt ‚|j jsVt ‚|  |j d¡dS)Nz-V)rÿrcrØràr)r6rr!rfrgr"rÞrÿÚclosedrŠrcrØrBrß)r:rr>r>r?Útest_ctx_manager€sû   zTestPopen.test_ctx_managerc Cs tddg}tj|tjtjtdv}| ¡| ¡| tj |j¡| tj |j ¡| tj |j t j ¡tr’| tj |j t j¡| tj |j t j¡W5QRXdS)Nrarýrþ)r!r6rrfrgr"rSrKrEr9rJrUrLrMr Z CTRL_C_EVENTZCTRL_BREAK_EVENTrr>r>r?Útest_kill_terminateŽs>ýüÿÿýzTestPopen.test_kill_terminateN) rârãräråÚ classmethodrürrrr>r>r>r?rú_s  rúÚ__main__)Ú run_from_name)Jrår–r]rNrerCrLr|rrfrrÜr{rîrér6rrrrrrr r r r Zpsutil._commonr Zpsutil._compatrrrrrZ psutil.testsrrrrrrrrrrrrrr r!r"r#r$r%r&r'r(r)r*r+r-r.r/r0r1r2r3r7rçrúrâZpsutil.tests.runnerr Ú__file__r>r>r>r?Ús                                                c6P