B Œ=Ý_7éã@sÞdZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlmZddlmZddlmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddl 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 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¡dkr¬Gd0d1„d1e=ƒZ?Gd2d3„d3e2ƒZ@eAd4krÚdd5lBmCZCeCeDƒdS)6zTests for psutil.Process class.éN)ÚAIX)ÚBSD)ÚLINUX)ÚMACOS)ÚNETBSD)ÚOPENBSD)ÚOSX)ÚPOSIX)ÚSUNOS)ÚWINDOWS)Ú open_text)ÚFileNotFoundError)Úlong)ÚPY3)Úsuper)ÚAPPVEYOR)Ú call_until)Ú CI_TESTING)Úcopyload_shared_lib)Ú create_exe)Ú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)Úmock)Úprocess_namespace)ÚPsutilTestCase)ÚPYPY)Ú PYTHON_EXE)Ú reap_children)Úretry_on_failure)Úsh)Úskip_on_access_denied)Úskip_on_not_implemented)Ú ThreadTask)Úunittest)Ú wait_for_pidc@sÒeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Ze   e d ¡d d„ƒZ dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd „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-d.„ƒƒZe   e d!¡e   e d/¡d0d1„ƒƒZ!e   e" d!¡d2d3„ƒZ#e   e" d!¡d4d5„ƒZ$e   e" d!¡d6d7„ƒZ%e   e" d!¡d8d9„ƒZ&e   e" d!¡d:d;„ƒZ'd¡d?d@„ƒZ)e   e* d!¡dAdB„ƒZ+e,ƒe-e.d)e   e* d!¡dCdD„ƒƒƒZ/e,ƒdEdF„ƒZ0dGdH„Z1e   e2 d!¡dIdJ„ƒZ3e   e2 d!¡dKdL„ƒZ4dMdN„Z5dOdP„Z6dQdR„Z7dSdT„Z8e   e9dU¡dVdW„ƒZ:dXdY„Z;e   e9dZ¡d[d\„ƒZd^¡e   e9dU¡d_d`„ƒƒƒZ?e   e d&¡dadb„ƒZ@e   e d&¡dcdd„ƒZAdedf„ZBdgdh„ZCdidj„ZDdkdl„ZEdmdn„ZFe   eG d!¡dodp„ƒZHe   eG d!¡dqdr„ƒZIe   eG d!¡dsdt„ƒZJe   eKdu¡e   eLdv¡dwdx„ƒƒZMe   eKdu¡e   eLdv¡dydz„ƒƒZNe   e d&¡d{d|„ƒZOeed)e   ePp´eQd}¡d~d„ƒƒZRd€d„ZSd‚dƒ„ZTd„d…„ZUd†d‡„ZVe,ƒdˆd‰„ƒZWdŠd‹„ZXdŒd„ZYdŽd„ZZdd‘„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§„Zfe   eg d!¡d¨d©„ƒZhe   eg d!¡e   e d&¡dªd«„ƒƒZid¬S)­Ú TestProcesszTests for psutil.Process class.cOs|j||Ž}t |j¡S)N)Úspawn_testprocÚpsutilÚProcessÚpid)ÚselfÚargsÚkwargsÚsproc©r6úL/opt/alt/python37/lib64/python3.7/site-packages/psutil/tests/test_process.pyÚ spawn_psprocNs zTestProcess.spawn_psprocc Cs:t ¡}| |jt ¡¡| t¡ d|_WdQRXdS)Né!)r/r0Ú assertEqualr1ÚosÚgetpidÚ assertRaisesÚAttributeError)r2Úpr6r6r7Útest_pidTs zTestProcess.test_pidcCsJ| ¡}| ¡| ¡}tr,| |tj¡n| |tj ¡| |¡dS)N) r8ÚkillÚwaitr r:ÚsignalÚSIGTERMÚSIGKILLÚassertProcessGone)r2r?Úcoder6r6r7Ú test_killZszTestProcess.test_killcCsJ| ¡}| ¡| ¡}tr,| |tj¡n| |tj ¡| |¡dS)N)r8Ú terminaterBr r:rCrDrF)r2r?rGr6r6r7Útest_terminatedszTestProcess.test_terminatecCsXtr tjntj}| ¡}| |¡| ¡}tr<| ||¡n| || ¡|  |¡dS)N) r rCrErDr8Ú send_signalrBr r:rF)r2Úsigr?rGr6r6r7Útest_send_signalns zTestProcess.test_send_signalz not POSIXc Cs‚tj}| ¡}tjdttjdƒd| t j |j |¡WdQRX| ¡}tjdttj dƒd| t j |j |¡WdQRXdS)Nzpsutil.os.killÚ)Ú side_effect)rCrDr8r ÚpatchÚOSErrorÚerrnoZESRCHr=r/Ú NoSuchProcessrKZEPERMÚ AccessDenied)r2rLr?r6r6r7Útest_send_signal_mockedysz#TestProcess.test_send_signal_mockedcCsÒtddg}| |¡}| ¡}| |d¡| |¡tddg}|j|tjd}| ¡}| |d¡| |¡tddg}| |¡}| ¡}| |d¡| |¡tdd g}| |¡}| ¡}| |d¡| |¡dS) Nz-cÚpassrz1 / 0)Ústderrézimport sys; sys.exit(5);ézimport os; os._exit(5);)r$r8rBr:rFÚ subprocessÚPIPE)r2Úcmdr?rGr6r6r7Útest_wait_exited†s(              zTestProcess.test_wait_exitedcCsê| ¡}tr‚| tj¡|jtj|jdd| tj ¡|jtj|jdd| tj ¡|  | ¡tj ¡|  | ¡tj ¡nd|  ¡|jtj|jdd|  ¡|jtj|jdd| ¡|  | ¡tj ¡|  | ¡tj ¡dS)Ngü©ñÒMbP?)Útimeout)r8r rKrCÚSIGSTOPr=r/ÚTimeoutExpiredrBÚSIGCONTrDr:ÚsuspendÚresumerI)r2r?r6r6r7Útest_wait_stopped¡s    zTestProcess.test_wait_stoppedcCs’| ¡\}}| tj|jd¡| tj|jd¡| ¡| ¡| ¡}| ¡}trr| |tj ¡| |d¡n| |tj ¡| |tj ¡dS)Ng{®Gáz„?) Úspawn_children_pairr=r/r`rBrIr r:rCrD)r2ÚchildÚ grandchildZ child_retZgrandchild_retr6r6r7Útest_wait_non_children¶s z"TestProcess.test_wait_non_childrencCsH| ¡}| ¡| tj|jd¡| tj|jd¡| t|jd¡dS)Ng{®Gáz„?réÿÿÿÿ)r8Únamer=r/r`rBÚ ValueError)r2r?r6r6r7Útest_wait_timeoutËs zTestProcess.test_wait_timeoutcCs¤| ¡}| tj|jd¡| ¡t ¡t}xBt ¡|krfy| d¡}PWq0tjk rbYq0Xq0W| d¡‚t rˆ|  |t j ¡n|  |t j ¡| |¡dS)Nrr^)r8r=r/r`rBrAÚtimerÚfailr r:rCrErDrF)r2r?Zstop_atrGr6r6r7Útest_wait_timeout_nonblockingÒs    z)TestProcess.test_wait_timeout_nonblockingc Cs|t ¡}|jdd|jddx4tdƒD](}|jdd}| |t¡| |d¡q*W| t¡|jddWdQRXdS)Ngü©ñÒMbP?)Zintervalédgri) r/r0Ú cpu_percentÚrangeÚassertIsInstanceÚfloatÚassertGreaterEqualr=rk)r2r?ÚxZpercentr6r6r7Útest_cpu_percentås     zTestProcess.test_cpu_percentc Cs*tjddd}t ¡ ¡WdQRXdS)Nzpsutil.cpu_count)Z return_value)r rPr/r0rq)r2Úmr6r6r7Útest_cpu_percent_numcpus_noneðs z)TestProcess.test_cpu_percent_numcpus_nonec Cs<t ¡ ¡}trx&|jD]}t dt t||ƒ¡¡qWdS)Nz%H:%M:%S) r/r0Ú cpu_timesrÚ_fieldsrmÚstrftimeÚ localtimeÚgetattr)r2Útimesrjr6r6r7Útest_cpu_timesös  zTestProcess.test_cpu_timescCsŒt ¡ ¡dd…\}}t ¡dd…\}}t||gƒt||gƒdkrZ| d||f¡t||gƒt||gƒdkrˆ| d||f¡dS)Négš™™™™™¹?zexpected: %s, found: %s)r/r0rzr;rÚmaxÚminrn)r2Ú user_timeZ kernel_timeÚutimeZktimer6r6r7Útest_cpu_times_2s zTestProcess.test_cpu_times_2z not supportedcCsPt ¡}| ¡}| |d¡t ¡dkr4| |d¡| | ¡tt ¡ƒ¡dS)NrrX)r/r0Zcpu_numruÚ cpu_countr:ÚassertInrr)r2r?Znumr6r6r7Ú test_cpu_nums    zTestProcess.test_cpu_numcCsZ| ¡}t ¡}| ¡}t||ƒ}|dkr@| d|||f¡t dt | ¡¡¡dS)Nrz'expected: %s, found: %s, difference: %sz%Y %m %d %H:%M:%S)r8rmÚ create_timeÚabsrnr|r})r2r?ZnowrŠÚ differencer6r6r7Útest_create_times zTestProcess.test_create_timez POSIX onlycCs4t ¡ ¡}|dk r0tj tdƒ¡}| ||¡dS)NÚtty)r/r0Úterminalr;ÚpathÚrealpathr'r:)r2rrŽr6r6r7Ú test_terminal's zTestProcess.test_terminal)Zonly_ifc Cs¬t ¡}| ¡}ttdƒ}| ¡WdQRX| ¡}ts„ts„| |j |j ¡|  |j |j ¡t r¤| |j |j ¡|  |j|j¡n | |j|j¡| |j|j¡| ¡}t| ¡dƒ.}trÖ| tdddƒ¡n| dd¡WdQRX| ¡}| |j |j ¡| |j|j¡| |j |j ¡| |j|j¡t r\| |j|j¡| |j |j ¡xJtt|ƒƒD]:}tr‚|dkr‚qj| ||d¡| ||d¡qjWdS)NÚrbÚwbrvi@BÚasciirr)r/r0Z io_countersÚopenr$ÚreadrrÚ assertGreaterZ read_countr:Z write_countrZ read_charsZ write_charsruZ read_bytesZ write_bytesÚ get_testfnrÚwriteÚbytesrrÚlen)r2r?Zio1ÚfZio2Úir6r6r7Útest_io_counters.s> zTestProcess.test_io_countersz linux onlyc CsÄt ¡}ts"| | ¡dtj¡| tjd¡| tjd¡| tjd¡| tjd¡| ¡}z4| tj¡| t | ¡ƒtjdf¡|  t ¡|jtjddWdQRX| tj¡| t | ¡ƒtjdf¡|jtjdd| t | ¡ƒtjdf¡|  t ¡|jtjddWdQRXy|jtjddWntj k rTYnX|  t d|jtjd¡|  t d|jtjd¡|j t d |jddWd|\}}|tjkr²d}| ||¡XdS) NrrXréé)Úvalueézioclass accepts no valuez$'ioclass' argument must be specified)r/r0rr:ÚioniceZIOPRIO_CLASS_NONEZIOPRIO_CLASS_RTZIOPRIO_CLASS_BEZIOPRIO_CLASS_IDLEÚtupler=rkrTÚassertRaisesRegex)r2r?ÚinitZioclassr¢r6r6r7Útest_ionice_linuxYsH     zTestProcess.test_ionice_linuxz!not supported on this win versionc Csât ¡}ts| | ¡tj¡| ¡}zª| tj¡| | ¡tj¡| tj¡| | ¡tj¡y| tj¡Wntj k rŠYnX| | ¡tj¡|j t d|jtjdd|  t d|jtjd¡Wd| |¡XdS)Nz&value argument not accepted on WindowsrX)r¢zis not a valid priority) r/r0rr:r¤Z IOPRIO_NORMALZIOPRIO_VERYLOWZ IOPRIO_LOWZ IOPRIO_HIGHrTr¦Ú TypeErrorrk)r2r?r§r6r6r7Útest_ionice_win…s*  zTestProcess.test_ionice_wincCsÈddl}t t ¡¡}dd„ttƒDƒ}xš|D]’}tt|ƒ}| |d¡|t|ƒkr†| |t||ƒ¡t rlq.| |  |¡|  |¡¡q.|  |¡}| t |ƒd¡| |dd¡| |dd¡q.WdS)NrcSsg|]}| d¡r|‘qS)ZRLIMIT)Ú startswith)Ú.0rvr6r6r7ú ¦sz/TestProcess.test_rlimit_get..rrirX) Úresourcer/r0r;r<Údirr~rur:r#ÚrlimitZ getrlimitrœ)r2r®r?Únamesrjr¢Úretr6r6r7Útest_rlimit_get¢s     zTestProcess.test_rlimit_getc Cs€| ¡}| tjd¡| | tj¡d¡trX| td¡tj  d¡ d¡WdQRX|  t¡| tjd¡WdQRXdS)N)rYrYzcan't use prlimitr)rYrYrY) r8r°r/Z RLIMIT_NOFILEr:rr¦rkZ _psplatformr0r=)r2r?r6r6r7Útest_rlimit_set¹s zTestProcess.test_rlimit_setc CsÞt ¡}| ¡}| tj¡\}}zŒ| tjd|f¡t|dƒ}| d¡WdQRX| t¡&}t|dƒ}| d¡WdQRXWdQRX|  t rš|j j n|j dt j ¡Wd| tj||f¡|  | tj¡||f¡XdS)Nir”sXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXsXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr)r/r0r™r°Ú RLIMIT_FSIZEr–ršr=ÚIOErrorr:rZ exceptionrRZEFBIG)r2r?ÚtestfnÚsoftÚhardrÚexcr6r6r7Ú test_rlimitÆs    zTestProcess.test_rlimitc Cs˜t ¡}| tj¡\}}zN| tjd|f¡| tjtj|f¡t| ¡dƒ}| d¡WdQRXWd| tj||f¡| | tj¡||f¡XdS)Nir”sXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX) r/r0r°rµÚ RLIM_INFINITYr–r™ršr:)r2r?r¸r¹rr6r6r7Útest_rlimit_infinityÚsz TestProcess.test_rlimit_infinitycCs<t ¡}| tj¡\}}| tj|¡| tj||f¡dS)N)r/r0r°rµr:r¼)r2r?r¸r¹r6r6r7Útest_rlimit_infinity_valueész&TestProcess.test_rlimit_infinity_valuec Csrt ¡}tr.gš™™™™™¹?)ZdeltacSsg|] }|j‘qSr6)rÇ)r¬rvr6r6r7r­0s) r8rrÅr/rTr+rÀZassertAlmostEqualrzÚuserÚsumÚsystem)r2r?r6r6r7Útest_threads_2 s  zTestProcess.test_threads_2c Csât ¡}| ¡dd…\}}| ¡}| |d¡| |d¡dgd}| ¡dd…\}}| ¡}| ||¡| ||¡| ||¡~tr´| ¡} | | j| j ¡| | j | j ¡| ¡} x | j D]} | t | | ƒd¡qÄWdS)Nrri`ã)r/r0Z memory_infoÚmemory_percentr˜rur r:ZrssZwsetÚvmsZpagefiler{r~) r2r?Zrss1Zvms1Zpercent1ZmemarrZrss2Zvms2Zpercent2Úmemrjr6r6r7Útest_memory_info2s&       zTestProcess.test_memory_infocCs®t ¡}t ¡j}| ¡}xT|jD]J}t||ƒ}|j|d||fd|dkrPts"t rVq"|j |||||fdq"Wt s|t s|t rŠ| |j d¡t rª| |jd¡| |jd¡dS)Nr)ÚmsgrÎ)r/r0Zvirtual_memoryÚtotalZmemory_full_infor{r~rurrZassertLessEqualr rÚussZpssZswap)r2r?rÒrÏrjr¢r6r6r7Útest_memory_full_infoQs    z!TestProcess.test_memory_full_infoc Cs>t ¡}| ¡}dd„|Dƒ}| t|ƒtt|ƒƒ¡|jdd}x¤|D]œ}|j d¡sHtr¬yWqät k r¨t sx‚n,t dƒ}|  ¡}WdQRXd|j|kr¤‚YqäXqHdt j |j¡krHyt  |j¡}WqHtk râYqHXqHWxP|D]H}xB|jD]8} t|| ƒ} | d krqúqú| d kr"qú| | ttf¡qúWqîWdS) NcSsg|]}|‘qSr6r6)r¬rvr6r6r7r­esz0TestProcess.test_memory_maps..F)Zgroupedú[z/proc/self/smapsz %s (deleted)Z64r)ZaddrZperms)r/r0Ú memory_mapsr:rœÚsetrr«r ÚAssertionErrorrr r—r;ÚbasenameÚstatr r{r~rsÚintr) r2r?ÚmapsÚpathsZext_mapsÚntrÚdataÚstZfnamer¢r6r6r7Útest_memory_mapsas@          zTestProcess.test_memory_mapsc sLt ¡}tƒ4}dd„‰‡fdd„| ¡Dƒ}| ˆ|ƒ|¡WdQRXdS)NcSstj tj |¡¡S)N)r;rr‘Únormcase)r?r6r6r7Únormpath”sz8TestProcess.test_memory_maps_lists_lib..normpathcsg|]}ˆ|jƒ‘qSr6)r)r¬rv)rãr6r7r­–sz:TestProcess.test_memory_maps_lists_lib..)r/r0rrÖrˆ)r2r?rZlibpathsr6)rãr7Útest_memory_maps_lists_libs   z&TestProcess.test_memory_maps_lists_libcCs>t ¡}| ¡|jt|jddts.ts.tr:|jdddS)Nz?!?)ZmemtyperÓ)r/r0rÍr=rkrrr )r2r?r6r6r7Útest_memory_percentšs  zTestProcess.test_memory_percentcCs| ¡}| ¡| ¡dS)N)r8rArB)r2r?r6r6r7Útest_is_running¡szTestProcess.test_is_runningc CsÔ| ¡}| ¡}y| |t¡Wn”tk r´trbt|ƒttƒkrbtjj }| ||ƒ|tƒ¡nNdt j dt j df}y | |  |d¡t  |d¡¡Wntk r®YnXYnXt |ddgƒ}| |d¡dS)Nz%s.%srrXrNz-czimport os; print('hey')Zhey)r8Úexer:r$rØr rœr;rrâÚsysÚ version_infoÚreplacer')r2r?rçrâZverÚoutr6r6r7Útest_exeªs  zTestProcess.test_execCsVtddg}| |¡}ts ts tr6| | ¡dt¡n| d | ¡¡d |¡¡dS)Nz-czimport time; time.sleep(60)rú )r$r8rrrr:ÚcmdlineÚjoin)r2rîr?r6r6r7Ú test_cmdlineÆs    zTestProcess.test_cmdlinezbroken on PYPYcCs>| ¡}t|ƒ|gdgd}| |¡}| | ¡|¡dS)NÚ 0123456789é)r™rr8r:rî)r2r·rîr?r6r6r7Útest_long_cmdlineÓs  zTestProcess.test_long_cmdlinecCs4| t¡}| ¡ ¡}tj tj tj ¡¡ ¡}dS)N) r8r$rjÚlowerr;rrÙr‘rèÚ executable)r2r?rjZpyexer6r6r7Ú test_nameÛs  zTestProcess.test_namezunreliable on PYPYcCs:|jdd}t|ƒ| |¡}| | ¡tj |¡¡dS)NZ01234567890123456789)Úsuffix)r™rr8r:rjr;rrÙ)r2r·r?r6r6r7Útest_long_nameás  zTestProcess.test_long_namezbroken on SUNOSz broken on AIXcCs||jdd}t|ƒ|ddddddg}| |¡}| | ¡|¡| | ¡tj |¡¡| tj  |  ¡¡tj  |¡¡dS)Nz foo bar ))r÷z-cz9import time; [time.sleep(0.01) for x in range(3000)];arg1Zarg2rNZarg3) r™rr8r:rîrjr;rrÙrârç)r2Z funky_pathrîr?r6r6r7Útest_prog_w_funky_nameés   z"TestProcess.test_prog_w_funky_namecCsXt ¡}| ¡\}}}| |t ¡¡| |t ¡¡ttdƒrT| t ¡| ¡¡dS)NÚ getresuid) r/r0Úuidsr:r;ÚgetuidÚgeteuidÚhasattrrú)r2r?ÚrealÚ effectiveÚsavedr6r6r7Ú test_uidsûs  zTestProcess.test_uidscCsXt ¡}| ¡\}}}| |t ¡¡| |t ¡¡ttdƒrT| t ¡| ¡¡dS)Nrú) r/r0Úgidsr:r;ÚgetgidÚgetegidrþÚ getresgid)r2r?rÿrrr6r6r7Ú test_gids s  zTestProcess.test_gidscCszt ¡}| t|jd¡| ¡}z(tržxrtjtjtjtj tj tj gD]R}|j |d<y| |¡Wntj k r|YnX| | ¡|¡WdQRXqFWnªyttdƒrÈ| t tjt ¡¡| ¡¡| d¡| | ¡d¡ttdƒr | t tjt ¡¡| ¡¡ts,| d¡| | ¡d¡Wntj k rFYnXWdy| |¡Wntj k rrYnXXdS)NÚstr)ÚprioÚ getpriorityrXr)r/r0r=r©Únicer ZNORMAL_PRIORITY_CLASSZIDLE_PRIORITY_CLASSZBELOW_NORMAL_PRIORITY_CLASSZREALTIME_PRIORITY_CLASSZHIGH_PRIORITY_CLASSZABOVE_NORMAL_PRIORITY_CLASSZsubTestrTr:rþr;r Ú PRIO_PROCESSr<r)r2r?r§r r6r6r7Ú test_nicesJ         zTestProcess.test_nicecCst ¡}| | ¡tj¡dS)N)r/r0r:ÚstatusZSTATUS_RUNNING)r2r?r6r6r7Ú test_statusCszTestProcess.test_statuscCsd| ¡}| ¡}trP| d¡\}}| |t ¡¡dtjkr`| |tjd¡n| |t ¡¡dS)Nú\Z USERDOMAIN) r8Úusernamer Úsplitr:ÚgetpassZgetuserr;Úenviron)r2r?rZdomainr6r6r7Ú test_usernameGs zTestProcess.test_usernamecCs | ¡}| | ¡t ¡¡dS)N)r8r:Úcwdr;Úgetcwd)r2r?r6r6r7Útest_cwdRszTestProcess.test_cwdcCs$tddg}| |¡}t|jdƒdS)Nz-cz/import os, time; os.chdir('..'); time.sleep(60)z#ret == os.path.dirname(os.getcwd()))r$r8rr)r2r\r?r6r6r7Ú test_cwd_2Vs zTestProcess.test_cwd_2cCs~t ¡}| ¡}| |j|¡ttdƒr@| |tt |j ¡ƒ¡| t |ƒt t |ƒƒ¡tt t tj ddƒƒƒ}xr|D]j}| |g¡| | ¡|g¡ttdƒr¾| | ¡tt |j ¡ƒ¡t|dƒrv| | ¡d| ¡¡qvW| g¡tr | | ¡|j ¡¡n| | ¡|¡ttdƒrD| | ¡tt |j ¡ƒ¡| t|jd¡| |¡| t |ƒ¡| t|ƒ¡dS)NÚsched_getaffinityT)ÚpercpuÚnum_cpurrX)r/r0Ú cpu_affinityÚ addCleanuprþr;r:Úlistrr1rœr×rrrqrrÚ_procZ_get_eligible_cpusr=r©r¥)r2r?ÚinitialZall_cpusÚnr6r6r7Útest_cpu_affinity\s4          zTestProcess.test_cpu_affinitycCsp| ¡}ttjddƒdg}| t|j|¡| t|jtddƒ¡| t|jddg¡| t|jddg¡dS) NT)ré i'iø*rÚ1ri) r8rœr/rzr=rkrrrr©)r2r?Z invalid_cpur6r6r7Útest_cpu_affinity_errs„s z"TestProcess.test_cpu_affinity_errscCs²t ¡}| ¡}| |j|¡t|ƒdkr6|dd…}g}xBtdt|ƒdƒD],}x&t ||¡D]}|r`| t |ƒ¡q`WqNWx.|D]&}| |¡|  t | ¡ƒt |ƒ¡q„WdS)Né rrX) r/r0rrrœrrÚ itertoolsÚ combinationsÚappendrr:Úsorted)r2r?r!ZcombosržZsubsetZcombor6r6r7Ú"test_cpu_affinity_all_combinationss    z.TestProcess.test_cpu_affinity_all_combinationsz broken on BSDzunreliable on APPVEYORc Cs2t ¡}| ¡}| ¡}| ||¡t|dƒx}| d¡| ¡t|jdt |ƒƒ}dd„|Dƒ}|  t j   |¡|¡tr¢x$|D]}|j |kr‚| |jd¡q‚WWdQRXx |D]}q²Wd|}| td|g¡}xJtd ƒD]*}d d„| ¡Dƒ}||krüPt d ¡qÜW|  t j   |¡|¡x|D]}q$WdS) Nr”sxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzlen(ret) != %icSsg|]}tj |j¡‘qSr6)r;rrâ)r¬rvr6r6r7r­¯sz/TestProcess.test_open_files..iz2import time; f = open(r'%s', 'r'); time.sleep(60);z-crpcSsg|]}tj |j¡‘qSr6)r;rrâ)r¬rvr6r6r7r­½sg{®Gáz„?)r/r0r™Ú open_filesÚ assertNotInr–ršÚflushrrœrˆr;rrârr:Zpositionr8r$rrrmÚsleep) r2r?r·ÚfilesrÚ filenamesÚfilerîrvr6r6r7Útest_open_files¢s4       zTestProcess.test_open_filesc Csþt ¡}tjj}| ¡}t|dƒÒ}xJ| ¡D](}||jƒ||jƒksT|j |  ¡kr.Pq.W|  dt | ¡ƒ¡|  ||jƒ||jƒ¡trœ|  |j d¡n|  |j |  ¡¡| ¡d}|  |d|j¡|  |d|j ¡| |j| ¡¡WdQRXdS)NÚwzno file found; files=%srirrX)r/r0r;rrâr™r–r-rjÚfdÚfilenornÚreprr:r r.)r2r?râr·Zfileobjr3Zntupler6r6r7Útest_open_files_2Çs"  zTestProcess.test_open_files_2cCsŽt ¡}| ¡}| ¡}t|dƒ}| |j¡| | ¡|d¡t ¡}| |j¡| | ¡|d¡| ¡| ¡| | ¡|¡dS)Nr5rXr) r/r0r™Znum_fdsr–rÚcloser:Úsocket)r2r?r·Ústartr3Zsockr6r6r7Ú test_num_fdsâs   zTestProcess.test_num_fdsz not reliable on OPENBSD & NETBSDcCsLt ¡}t| ¡ƒ}x(tdƒD]}t| ¡ƒ}||krdSqW| d¡dS)Ni ¡z7num ctx switches still the same after 50.000 iterations)r/r0rÊZnum_ctx_switchesrrrn)r2r?ZbeforervZafterr6r6r7Útest_num_ctx_switchesñs  z!TestProcess.test_num_ctx_switchescCsNt ¡}ttdƒr&| | ¡t ¡¡| ¡}| | ¡t ¡¡t rJdSdS)NÚgetppid) r/r0rþr;r:Úppidr?r8r<r)r2r?r6r6r7Ú test_ppidüs zTestProcess.test_ppidcCsB| ¡}| | ¡jt ¡¡t ¡d}| t  |¡ ¡¡dS)Nr) r8r:Úparentr1r;r<r/ÚpidsÚ assertIsNoner0)r2r?Z lowest_pidr6r6r7Ú test_parents zTestProcess.test_parentcCs8t ¡}| ¡\}}| | ¡|¡| | ¡|¡dS)N)r/r0rer:rB)r2rBrfrgr6r6r7Útest_parent_multis zTestProcess.test_parent_multic Cs<| ¡}tjdt dd¡d| | ¡¡WdQRXdS)Nzpsutil.ProcessrÚfoo)rO)r8r rPr/rSrDrB)r2r?r6r6r7Útest_parent_disappearedsz#TestProcess.test_parent_disappearedcCsTt ¡}| ¡\}}| | ¡d|¡| | ¡d|¡| | ¡d|¡dS)NrrX)r/r0rer:Úparents)r2rBrfrgr6r6r7Ú test_parentss  zTestProcess.test_parentscCsœt ¡}| | ¡g¡| |jddg¡|jdd}| ¡}|jdd}xJ||fD]>}| t|ƒd¡| |dj|j¡| |d ¡|j¡qVWdS)NT)Ú recursiver)Z creationflagsrX)r/r0r:Úchildrenr8rœr1r@)r2rBrfZ children1Z children2rLr6r6r7Ú test_children%s  zTestProcess.test_childrencCsft ¡}| ¡\}}| | ¡|g¡| |jdd||g¡| ¡| ¡| |jddg¡dS)NT)rK)r/r0rer:rLrIrB)r2rBrfrgr6r6r7Útest_children_recursive4s z#TestProcess.test_children_recursivec CsÌt t¡}x@t ¡D]4}y|| ¡d7<Wqtjk rFYqXqWt| ¡dd„ddd}t r~|dkr~|  d¡‚t  |¡}y|j dd }Wntj k r®YnX| t|ƒtt|ƒƒ¡dS) NrXcSs|dS)NrXr6)rvr6r6r7ÚJóz6TestProcess.test_children_duplicates..)ÚkeyrirzPID 0T)rK)Ú collectionsÚ defaultdictrÛr/Ú process_iterr@ÚErrorr+ÚitemsrZskipTestr0rLrTr:rœr×)r2Útabler?r1Úcr6r6r7Útest_children_duplicatesAs     z$TestProcess.test_children_duplicatescCs|t ¡}| ¡\}}|jdd}| t|ƒd¡| |d|¡| |d|¡| ¡}| |d|¡| |d|¡dS)NT)rKrrrX)r/r0rerLr:rœrI)r2rBrfrgrLrIr6r6r7Útest_parents_and_childrenUs  z%TestProcess.test_parents_and_childrencCsZ| ¡}| ¡x*tdƒD]}| ¡tjkr.Pt d¡qW| ¡|  | ¡tj¡dS)Nrpg{®Gáz„?) r8rbrrrr/ZSTATUS_STOPPEDrmr0rcÚassertNotEqual)r2r?rvr6r6r7Útest_suspend_resumebszTestProcess.test_suspend_resumecCs$| ttjd¡| ttjd¡dS)Nr%ri)r=r©r/r0rk)r2r6r6r7Útest_invalid_pidlszTestProcess.test_invalid_pidc Csît ¡}|jddgd}| t| ¡ƒddg¡t tt ¡ƒ¡}|jdgdd}t|dt ƒsp| |dd¡t j ddtj d "| |jd gd dd d i¡WdQRXt j ddt  |jd¡d |jtj |jd gdWdQRXt j ddt |jd¡d "| |jd gddd di¡WdQRXt j ddtd F| ¡}| d t | ¡ƒ¡| t¡|jd gdWdQRXWdQRX| t¡| d¡WdQRX| t¡| dg¡WdQRX| t¡| dd g¡WdQRXdS) Nrçrj)ÚattrsZ connectionsrG)r^Zad_valuezpsutil.Process.niceT)ZcreaterOr rXZbar)r/r0Úas_dictr:r+ÚkeysrƒrCÚ isinstancerr rPrTrSr1r=Ú ZombieProcessÚNotImplementedErrorr.r©rk)r2r?Údr6r6r7Ú test_as_dictps> ""  "   zTestProcess.test_as_dictc Csˆt ¡}t d¡8}| ¡| ¡| ¡WdQRX| |jd¡WdQRXt d¡}| ¡| ¡WdQRX| |jd¡dS)Nz$psutil._psplatform.Process.cpu_timesrXr)r/r0r rPÚoneshotrzr:Ú call_count)r2r?rxr6r6r7Ú test_oneshotžs   zTestProcess.test_oneshotc CsÐt ¡}t d¡€}t d¡j}| ¡:| ¡| ¡| ¡| ¡| ¡WdQRXWdQRX| |jd¡| |jd¡WdQRXWdQRXt d¡}| ¡| ¡WdQRX| |jd¡dS)Nz$psutil._psplatform.Process.cpu_timesz(psutil._psplatform.Process.oneshot_enterrXr)r/r0r rPrfrzr:rg)r2r?Zm1Zm2rxr6r6r7Útest_oneshot_twice«s    " zTestProcess.test_oneshot_twicec Cs”| ¡\}}| ¡}| ¡}| ||¡| ¡&| | ¡|¡| | ¡|¡WdQRX| ¡&| | ¡|¡| | ¡|¡WdQRXdS)N)rer@r[rfr:)r2Zp1Zp2Zp1_ppidZp2_ppidr6r6r7Útest_oneshot_cache¿s    zTestProcess.test_oneshot_cachecsœ‡fdd„}ˆ ¡}| ¡| ¡tr:ttjd|jƒˆ |¡t |ƒ}x"|  |j ¡D]\}}|||ƒqZWtr˜t s˜t jj}ˆ || ¡ƒ|tƒ¡dS)Ncs„y |ƒ}WnRtjk r"‚Yn^tjk r6YnJtjk r\trV|dkrVdS‚Yn$Xtrn|dkrndSˆ d||f¡‚dS)N)rÅr¿)rçrjz+%r didn't raise NSP and returned %r instead)r/rbrSrTrr rn)ÚfunZfun_namer²)r2r6r7Úassert_raises_nspÖs   zFTestProcess.test_halfway_terminated_process..assert_raises_nspz %s not in ret)r8rIrBr rr/rCr1rFr!ÚiterÚallrr;rrâr:rçr$)r2rlr?Únsrkrjrâr6)r2r7Útest_halfway_terminated_processÎs  z+TestProcess.test_halfway_terminated_processcCs¸dd„}| ¡\}}t |j¡}| | ¡tj¡| ¡t|ƒ}x |  |j ¡D]\}}||ƒqPW|  |jt  ¡¡|  |jdd„t  ¡Dƒ¡it_|  |jdd„t  ¡Dƒ¡dS)Nc Ss(y|ƒStjtjfk r"YnXdS)N)r/rbrT)rkr6r6r7Úsucceed_or_zombie_p_excúsz@TestProcess.test_zombie_process..succeed_or_zombie_p_exccSsg|] }|j‘qSr6)r1)r¬rvr6r6r7r­sz3TestProcess.test_zombie_process..cSsg|] }|j‘qSr6)r1)r¬rvr6r6r7r­s)Z spawn_zombier/r0r1r:rÚ STATUS_ZOMBIEr_r!rmrnrˆrCrTZ_pmap)r2rqrBZzombieZzprocrorkrjr6r6r7Útest_zombie_processøs    zTestProcess.test_zombie_processc Cs,t ¡}tjdt d¡d}WdQRXdS)Nzpsutil.Processr)rO)r/r0r rPrb)r2r?rxr6r6r7Ú$test_zombie_process_is_running_w_excsz0TestProcess.test_zombie_process_is_running_w_excc Cs>t ¡}tjdt d¡d}| | ¡tj¡WdQRXdS)Nz!psutil._psplatform.Process.statusr)rO)r/r0r rPrbr:rrr)r2r?rxr6r6r7Ú test_zombie_process_status_w_exc's z,TestProcess.test_zombie_process_status_w_excc CsXdt ¡kr8| tjtjd¡| t d¡ ¡d¡dSt d¡}trLtjnt }| ||j ¡| ||j ¡| ||j ¡| ||j ¡| ||j¡| ||jtj¡t|ƒ}xŒ| |j|j¡D]v\}}y |ƒ}Wntjk rìYqÄX|dkr| |jd¡qÄ|dkr2trdnd}| | ¡|¡qÄ|dkrÄqÄWtsT| dt ¡¡dS)NrrX)rûrrzNT AUTHORITY\SYSTEMÚrootrj)r/rCr=rSr0r:r@r rTrkrBrIrbrcrArKrCrDr!rmZgettersZsettersrÿrrrˆ)r2r?rºrorkrjr²rÉr6r6r7Ú test_pid_01s8     zTestProcess.test_pid_0cCsHdd„}d|_t ¡}|| ¡ƒ}|tj ¡ƒ}tsDtrD| ||¡dS)NcSsb| dd¡| dd¡| dd¡trL| dd¡| dd¡| dd¡tdd„| ¡DƒƒS) NZPSUTIL_TESTINGZPLATÚHOMEZ__CF_USER_TEXT_ENCODINGZVERSIONER_PYTHON_PREFER_32_BITZVERSIONER_PYTHON_VERSIONcSs8g|]0\}}| dd¡ dd¡| dd¡ dd¡f‘qS)ú rNÚ )rê)r¬ÚkÚvr6r6r7r­dsz@TestProcess.test_environ..clean_dict..)ÚpoprÚdictrV)rdr6r6r7Ú clean_dictZs      z,TestProcess.test_environ..clean_dict) ZmaxDiffr/r0rr;Úcopyrrr:)r2rr?Zd1Zd2r6r6r7Ú test_environXs zTestProcess.test_environcCs¾t d¡}| ¡}t||d|j|gtjtjd}t |j ¡}t |j ƒ|  |j   ¡d¡trŠtrŠy | ¡}Wq’tjk r†dSXn| ¡}|  |dddœ¡| ¡|  |jd¡dS) Na× #include #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)ÚstdinrWrPr%Ú3)ÚAÚCr)ÚtextwrapÚdedentr™rr.rZr[r/r0r1r,r:rWr—rrrrTÚ communicateÚ returncode)r2rGrr5r?Úenvr6r6r7Útest_weird_environos$     zTestProcess.test_weird_environN)jÚ__name__Ú __module__Ú __qualname__Ú__doc__r8r@rHrJrMr+ÚskipIfr rUr]rdrhrlrorwryr€r†rr‰rr’rr)rrŸrr¨r rªrr³r´r»r½r¾rÃrÄrrÈr&r(rrÌrÐrÔrrárärårærìrðr#rórörør rrùrrr rrrrrr#r&r,rrr4r9r=rrr>rArErFrHrJrMrNrYrZr\r]rerhrirjrprsrtrurwrrr‹r6r6r6r7r-Ks´         * +   .     , (  #       . *%  ' r-csneZdZdZeedƒ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. rücsXtƒj||ŽxDdd„t|ƒDƒD].}t||ƒ‰‡fdd„}t||t ||¡ƒq"WdS)NcSsg|]}| d¡r|‘qS)Ztest)r«)r¬rvr6r6r7r­¬sz0LimitedUserTestCase.__init__..cs&y ˆƒWntjk r YnXdS)N)r/rT)r2)Úmethr6r7Útest_¯s z+LimitedUserTestCase.__init__..test_)rÚ__init__r¯r~ÚsetattrÚtypesÚ MethodType)r2r3r4Úattrr“)Ú __class__)r’r7r”¨s   zLimitedUserTestCase.__init__cs"tƒ ¡t d¡t d¡dS)Niè)rÚsetUpr;ÚsetegidÚseteuid)r2)r™r6r7rš¶s  zLimitedUserTestCase.setUpcs&t |j¡t |j¡tƒ ¡dS)N)r;r›Ú PROCESS_UIDrœÚ PROCESS_GIDrÚtearDown)r2)r™r6r7rŸ»s  zLimitedUserTestCase.tearDowncCs8yt ¡ d¡Wntjk r(Yn X| d¡dS)Nrizexception not raised)r/r0r rTrn)r2r6r6r7r Às zLimitedUserTestCase.test_nicerXzcauses problem as rootcCsdS)Nr6)r2r6r6r7rsÈsz'LimitedUserTestCase.test_zombie_process)rŒrrŽrrþr;rürrržr”ršrŸr r+rrsÚ __classcell__r6r6)r™r7r‘žs    r‘c@s4eZdZdZedd„ƒZdd„Zdd„Zdd „Zd S) Ú TestPopenzTests for psutil.Popen class.cCs tƒdS)N)r%)Úclsr6r6r7Ú tearDownClassÕszTestPopen.tearDownClassc Csštddg}tj|tjtjdB}| ¡| ¡|j| t |ƒ¡|  t t |d¡|  ¡WdQRXtr‚| | d¡tj ¡n| | d¡tj¡dS)Nz-czimport time; time.sleep(60);)ÚstdoutrWrGrY)r$r/ÚPopenrZr[rjrzr‚Z assertTruer¯r=r>r~rIr r:rBrCrD)r2r\Úprocr6r6r7Ú test_miscÙs   zTestPopen.test_miscc CsBtjtdgtjtjtjd}| ¡WdQRX| |jd¡dS)Nz-V)r¤rWr‚r)r/r¥r$rZr[rˆr:r‰)r2r¦r6r6r7Útest_ctx_managerës   zTestPopen.test_ctx_managerc Cs¨tddg}tj|tjtjd€}| ¡| ¡| tj|j¡| tj|j ¡| tj|j t j ¡t rštjdkrš| tj|j t j¡| tj|j t j¡WdQRXdS)Nz-czimport time; time.sleep(60);)r¤rW)rr¡)r$r/r¥rZr[rIrBr=rSrArKrCrDr rèréZ CTRL_C_EVENTZCTRL_BREAK_EVENT)r2r\r¦r6r6r7Útest_kill_terminateös      zTestPopen.test_kill_terminateN) rŒrrŽrÚ classmethodr£r§r¨r©r6r6r6r7r¡Òs   r¡Ú__main__)Ú run_from_name)ErrRrRrr(r;rCr;rÚrZrèr†rmr–r/rrrrrrrr r r Zpsutil._commonr Zpsutil._compatr rrrZ psutil.testsrrrrrrrrrrrrrrrr r!r"r#r$r%r&r'r(r)r*r+r,r-rür‘r¡rŒZpsutil.tests.runnerr¬Ú__file__r6r6r6r7Ús”                                           [48