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/Ú NoSuchProcessrKÚEPERMÚ 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/rarBrIr 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/rarBÚ 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/rarBrAÚ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?)Úintervalédgrj) r/r0Ú cpu_percentÚrangeÚassertIsInstanceÚfloatÚassertGreaterEqualr=rl)r2r?ÚxÚpercentr6r6r7Útest_cpu_percentås     zTestProcess.test_cpu_percentc Cs4tjddd}t ¡ ¡|js&t‚WdQRXdS)Nzpsutil.cpu_count)Z return_value)r rPr/r0rsÚcalledÚAssertionError)r2Úmr6r6r7Útest_cpu_percent_numcpus_noneðs z)TestProcess.test_cpu_percent_numcpus_nonec CsŽt ¡ ¡}|jdks(|jdks(t|ƒ‚|jdks:t|ƒ‚|jdksLt|ƒ‚trb|j dksbt|ƒ‚x&|j D]}t   dt   t||ƒ¡¡qjWdS)Ngz%H:%M:%S)r/r0Ú cpu_timesÚuserÚsystemr|Ú children_userÚchildren_systemrZiowaitÚ_fieldsrnÚstrftimeÚ localtimeÚgetattr)r2Útimesrkr6r6r7Ú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/r0rr;rˆÚmaxÚminro)r2Ú user_timeZ kernel_timeÚutimeZktimer6r6r7Útest_cpu_times_2s zTestProcess.test_cpu_times_2z not supportedcCsPt ¡}| ¡}| |d¡t ¡dkr4| |d¡| | ¡tt ¡ƒ¡dS)NrrY)r/r0Zcpu_numrwÚ cpu_countr:ÚassertInrt)r2r?Únumr6r6r7Ú 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)r8rnÚ create_timeÚabsror…r†)r2r?Únowr”Ú differencer6r6r7Útest_create_times zTestProcess.test_create_timez POSIX onlycCs4t ¡ ¡}|dk r0tj tdƒ¡}| ||¡dS)NÚtty)r/r0Úterminalr;ÚpathÚrealpathr'r:)r2ršr™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Úwbrxi@BÚasciirŠr)r/r0Z io_countersÚopenr$ÚreadrrÚ assertGreaterÚ read_countr:Ú write_countrZ read_charsZ write_charsrwÚ read_bytesÚ write_bytesÚ get_testfnrÚwriteÚbytesrtÚ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) NrrYrŠéé)Úvalueézioclass accepts no valuez$'ioclass' argument must be specified)r/r0rr:ÚioniceZIOPRIO_CLASS_NONEZIOPRIO_CLASS_RTZIOPRIO_CLASS_BEZIOPRIO_CLASS_IDLEÚtupler=rlrUÚassertRaisesRegex)r2r?ÚinitÚioclassr±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 WindowsrY)r±zis not a valid priority) r/r0rr:r³Z IOPRIO_NORMALZIOPRIO_VERYLOWZ IOPRIO_LOWZ IOPRIO_HIGHrUrµÚ TypeErrorrl)r2r?r¶r6r6r7Útest_ionice_win…s*  zTestProcess.test_ionice_wincCsÔddl}t t ¡¡}dd„ttƒDƒ}|s4t|ƒ‚xš|D]’}tt|ƒ}| |d¡|t|ƒkr’|  |t||ƒ¡t rxq:|  |  |¡|  |¡¡q:|  |¡}|  t |ƒd¡| |dd¡| |dd¡q:WdS)NrcSsg|]}| d¡r|‘qS)ZRLIMIT)Ú startswith)Ú.0rxr6r6r7ú ¦sz/TestProcess.test_rlimit_get..rŠrjrY)Úresourcer/r0r;r<Údirr|r‡rwr:r#ÚrlimitZ getrlimitr«)r2r¾r?Únamesrkr±Úretr6r6r7Útest_rlimit_get¢s       zTestProcess.test_rlimit_getc Cs€| ¡}| tjd¡| | tj¡d¡trX| td¡tj  d¡ d¡WdQRX|  t¡| tjd¡WdQRXdS)N)rZrZzcan't use prlimitr)rZrZrZ) r8rÀr/Z RLIMIT_NOFILEr:rrµrlZ _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:rÚ 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Êr¬r6r6r7Ú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š™™™™™¹?)ÚdeltacSsg|] }|j‘qSr6)rØ)r¼rxr6r6r7r½0s) r8rrÖr/rUr+rÑZassertAlmostEqualrr€Úsumr)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)NrŠri`ã)r/r0Z memory_infoÚmemory_percentr£rwr r:ZrssZwsetÚvmsZpagefiler„r‡) r2r?Zrss1Zvms1Zpercent1ZmemarrZrss2Zvms2Zpercent2Úmemrkr6r6r7Ú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‡rwrrZassertLessEqualr rÚussZpssZswap)r2r?rârßrkr±r6r6r7Útest_memory_full_infoQs    z!TestProcess.test_memory_full_infoc Cs¼t ¡}| ¡}dd„|Dƒ}| t|ƒtt|ƒƒ¡|jdd}xú|D]ò}|j d¡sJtj  |j¡srt |jƒ‚t rìy*tj  |j¡sžtj  |j¡sžt |jƒ‚WnHt k rèts¸‚n,tdƒ}| ¡}WdQRXd|j|krä‚YnXqJdtj |j¡krJyt |j¡}Wntk r$YqJXt |j¡sJt |jƒ‚qJWxv|D]n}xf|jD]\} t|| ƒ} | d krpqRn<| d krŠ| s¬t | ƒ‚n"| | ttf¡| d ksRt | ƒ‚qRWqFWdS) NcSsg|]}|‘qSr6r6)r¼rxr6r6r7r½esz0TestProcess.test_memory_maps..F)Zgroupedú[z/proc/self/smapsz %s (deleted)Z64r›)ÚaddrZpermsr)r/r0Ú memory_mapsr:r«Úsetr›r»r;Úisabsr|r ÚexistsÚislinkrr r¢ÚbasenameÚstatr ÚS_ISREGÚst_moder„r‡ruÚintr) r2r?ÚmapsÚpathsZext_mapsÚntr¬ÚdataÚstÚfnamer±r6r6r7Útest_memory_mapsasD          zTestProcess.test_memory_mapsc sLt ¡}tƒ4}dd„‰‡fdd„| ¡Dƒ}| ˆ|ƒ|¡WdQRXdS)NcSstj tj |¡¡S)N)r;r›rœÚnormcase)r?r6r6r7Únormpath”sz8TestProcess.test_memory_maps_lists_lib..normpathcsg|]}ˆ|jƒ‘qSr6)r›)r¼rx)rùr6r7r½–sz:TestProcess.test_memory_maps_lists_lib..)r/r0rrçr‘)r2r?r›Zlibpathsr6)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=rlrrr )r2r?r6r6r7Útest_memory_percentšs  zTestProcess.test_memory_percentcCsL| ¡}| ¡st‚| ¡s t‚| ¡| ¡| ¡r| ¡}t|ƒ|gdgd}| |¡}| | ¡|¡dS)NÚ 0123456789é)r¨rr8r:r)r2rÈrr?r6r6r7Útest_long_cmdlineÓs  zTestProcess.test_long_cmdlinecCsJ| t¡}| ¡ ¡}tj tj tj ¡¡ ¡}|  |¡sFt ||fƒ‚dS)N) r8r$rkÚlowerr;r›rìrœrÿÚ executabler»r|)r2r?rkZpyexer6r6r7Ú test_nameÛs  zTestProcess.test_namezunreliable on PYPYcCs:|jdd}t|ƒ| |¡}| | ¡tj |¡¡dS)NZ01234567890123456789)Úsuffix)r¨rr8r:rkr;r›rì)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 ))rz-cz9import time; [time.sleep(0.01) for x in range(3000)];arg1Zarg2rNZarg3) r¨rr8r:rrkr;r›rìrørþ)r2Z funky_pathrr?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?rrrr6r6r7Ú 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Ú getpriorityrYr)r/r0r=r¹Únicer ZNORMAL_PRIORITY_CLASSZIDLE_PRIORITY_CLASSZBELOW_NORMAL_PRIORITY_CLASSZREALTIME_PRIORITY_CLASSZHIGH_PRIORITY_CLASSZABOVE_NORMAL_PRIORITY_CLASSZsubTestrUr:rr;r"Ú PRIO_PROCESSr<r)r2r?r¶r!r6r6r7Ú test_nicesJ         zTestProcess.test_nicecCst ¡}| | ¡tj¡dS)N)r/r0r:ÚstatusÚSTATUS_RUNNING)r2r?r6r6r7Ú test_statusCszTestProcess.test_statuscCsd| ¡}| ¡}trP| d¡\}}| |t ¡¡dtjkr`| |tjd¡n| |t ¡¡dS)Nú\Z USERDOMAIN) r8Úusernamer Úsplitr:ÚgetpassZgetuserr;Úenviron)r2r?r*Údomainr6r6r7Ú 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$r8rr0)r2r]r?r6r6r7Ú test_cwd_2Vs zTestProcess.test_cwd_2cCsŠt ¡}| ¡}|st|ƒ‚| |j|¡ttdƒrL| |tt  |j ¡ƒ¡| t |ƒt t |ƒƒ¡tt t tjddƒƒƒ}xr|D]j}| |g¡| | ¡|g¡ttdƒrÊ| | ¡tt  |j ¡ƒ¡t|dƒr‚| | ¡d| ¡¡q‚W| g¡tr| | ¡|j ¡¡n| | ¡|¡ttdƒrP| | ¡tt  |j ¡ƒ¡| t|jd¡| |¡| t |ƒ¡| t|ƒ¡dS)NÚsched_getaffinityT)ÚpercpuÚnum_cpurrY)r/r0Ú cpu_affinityr|Ú addCleanuprr;r:Úlistr4r1r«rèrtrsr6rÚ_procZ_get_eligible_cpusr=r¹r´)r2r?ÚinitialZall_cpusÚnr6r6r7Útest_cpu_affinity\s6           zTestProcess.test_cpu_affinitycCsp| ¡}ttjddƒdg}| t|j|¡| t|jtddƒ¡| t|jddg¡| t|jddg¡dS) NT)r5é i'iø*rÚ1rj) r8r«r/rr=rlr7rtr¹)r2r?Z invalid_cpur6r6r7Útest_cpu_affinity_errs„s z"TestProcess.test_cpu_affinity_errscCs¾t ¡}| ¡}|st|ƒ‚| |j|¡t|ƒdkrB|dd…}g}xBtdt|ƒdƒD],}x&t ||¡D]}|rl|  t |ƒ¡qlWqZWx.|D]&}| |¡|  t | ¡ƒt |ƒ¡qWdS)Né rrY) r/r0r7r|r8r«rtÚ itertoolsÚ combinationsÚappendr9r:Úsorted)r2r?r;Zcombosr­ZsubsetÚcombor6r6r7Ú"test_cpu_affinity_all_combinationss     z.TestProcess.test_cpu_affinity_all_combinationsz broken on BSDzunreliable on APPVEYORc Cs`t ¡}| ¡}| ¡}| ||¡t|dƒx}| d¡| ¡t|jdt |ƒƒ}dd„|Dƒ}|  t j   |¡|¡tr¢x$|D]}|j |kr‚| |jd¡q‚WWdQRXx"|D]}t j  |j ¡s²t|ƒ‚q²Wd|}| td|g¡}xLtd ƒD],}d d„| ¡Dƒ}||krPt d ¡qòW|  t j   |¡|¡x$|D]}t j  |¡s.iz2import time; f = open(r'%s', 'r'); time.sleep(60);z-crrcSsg|]}tj |j¡‘qSr6)r;r›rø)r¼rxr6r6r7r½½sg{®Gáz„?)r/r0r¨Ú open_filesÚ assertNotInr¡r©Úflushrr«r‘r;r›rørr:ÚpositionÚisfiler|r8r$rtrnÚsleep) r2r?rÈÚfilesr¬Ú filenamesÚfilerrxr6r6r7Ú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=%srjrrY)r/r0r;r›rør¨r¡rHrkÚfdÚfilenoroÚreprr:r rI)r2r?rørÈÚfileobjrPZntupler6r6r7Útest_open_files_2Çs"  zTestProcess.test_open_files_2cCsŽt ¡}| ¡}| ¡}t|dƒ}| |j¡| | ¡|d¡t ¡}| |j¡| | ¡|d¡| ¡| ¡| | ¡|¡dS)NrRrYrŠ) r/r0r¨Znum_fdsr¡r8Úcloser:Úsocket)r2r?rÈÚstartrPÚsockr6r6r7Ú 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_switchesrtro)r2r?ÚbeforerxÚafterr6r6r7Útest_num_ctx_switchesñs  z!TestProcess.test_num_ctx_switchescCsNt ¡}ttdƒr&| | ¡t ¡¡| ¡}| | ¡t ¡¡t rJdSdS)NÚgetppid) r/r0rr;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/r0rfr:rc)r2rcrgrhr6r6r7Útest_parent_multis zTestProcess.test_parent_multic Cs<| ¡}tjdt dd¡d| | ¡¡WdQRXdS)Nzpsutil.ProcessrÚfoo)rO)r8r rPr/rSrerc)r2r?r6r6r7Útest_parent_disappearedsz#TestProcess.test_parent_disappearedcCs`t ¡}| ¡st‚| ¡\}}| | ¡d|¡| | ¡d|¡| | ¡d|¡dS)NrrY)r/r0Úparentsr|rfr:)r2rcrgrhr6r6r7Ú test_parentss   zTestProcess.test_parentscCsœt ¡}| | ¡g¡| |jddg¡|jdd}| ¡}|jdd}xJ||fD]>}| t|ƒd¡| |dj|j¡| |d ¡|j¡qVWdS)NT)Ú recursiver)Ú creationflagsrY)r/r0r:Úchildrenr8r«r1ra)r2rcrgZ children1Z children2rnr6r6r7Ú test_children%s  zTestProcess.test_childrencCsft ¡}| ¡\}}| | ¡|g¡| |jdd||g¡| ¡| ¡| |jddg¡dS)NT)rl)r/r0rfr:rnrIrB)r2rcrgrhr6r6r7Ú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) NrYcSs|dS)NrYr6)rxr6r6r7ÚJóz6TestProcess.test_children_duplicates..)ÚkeyrjrzPID 0T)rl)Ú collectionsÚ defaultdictrðr/Ú process_iterraÚErrorrEÚitemsrZskipTestr0rnrUr:r«rè)r2Útabler?r1Úcr6r6r7Útest_children_duplicatesAs     z$TestProcess.test_children_duplicatescCs|t ¡}| ¡\}}|jdd}| t|ƒd¡| |d|¡| |d|¡| ¡}| |d|¡| |d|¡dS)NT)rlrŠrrY)r/r0rfrnr:r«rj)r2rcrgrhrnrjr6r6r7Útest_parents_and_childrenUs  z%TestProcess.test_parents_and_childrencCsZ| ¡}| ¡x*tdƒD]}| ¡tjkr.Pt d¡qW| ¡|  | ¡tj¡dS)Nrrg{®Gáz„?) r8rcrtr&r/ÚSTATUS_STOPPEDrnrMrdÚassertNotEqual)r2r?rxr6r6r7Útest_suspend_resumebszTestProcess.test_suspend_resumecCs$| ttjd¡| ttjd¡dS)Nr?rj)r=r¹r/r0rl)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þrk)ÚattrsZ connectionsrh)rZad_valuezpsutil.Process.niceT)ÚcreaterOr#rYZbar)r/r0Úas_dictr:rEÚkeysrŒrdÚ isinstancer9r rPrUrSr1r=Ú ZombieProcessÚNotImplementedErrorrIr¹rl)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_timesrYrŠ)r/r0r rPÚoneshotrr:Ú call_count)r2r?r}r6r6r7Ú 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_enterrYrŠ)r/r0r rPrŠrr:r‹)r2r?Úm1Úm2r}r6r6r7Útest_oneshot_twice«s    " zTestProcess.test_oneshot_twicec Cs”| ¡\}}| ¡}| ¡}| ||¡| ¡&| | ¡|¡| | ¡|¡WdQRX| ¡&| | ¡|¡| | ¡|¡WdQRXdS)N)rfrar~rŠr:)r2Úp1Úp2Zp1_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þrkz+%r didn't raise NSP and returned %r instead)r/r†rSrUrr ro)ÚfunZfun_namerÂ)r2r6r7Úassert_raises_nspÖs   zFTestProcess.test_halfway_terminated_process..assert_raises_nspz %s not in ret)r8rIrBr rr/rdr1rFr!ÚiterÚallrr;r›rør:rþr$)r2r”r?Únsr“rkrør6)r2r7Útest_halfway_terminated_processÎs  z+TestProcess.test_halfway_terminated_processcCsÔdd„}| ¡\}}t |j¡}| | ¡tj¡| ¡s>t‚|  ¡t |ƒ}x |  |j ¡D]\}}||ƒq\Wt  |j¡s€t‚| |jt ¡¡| |jdd„t ¡Dƒ¡it_| |jdd„t ¡Dƒ¡dS)Nc Ss(y|ƒStjtjfk r"YnXdS)N)r/r†rU)r“r6r6r7Úsucceed_or_zombie_p_excúsz@TestProcess.test_zombie_process..succeed_or_zombie_p_exccSsg|] }|j‘qSr6)r1)r¼rxr6r6r7r½sz3TestProcess.test_zombie_process..cSsg|] }|j‘qSr6)r1)r¼rxr6r6r7r½s)Z spawn_zombier/r0r1r:r&Ú STATUS_ZOMBIErür|rƒr!r•r–Ú pid_existsr‘rdrvZ_pmap)r2r™rcÚzombieZzprocr—r“rkr6r6r7Útest_zombie_processøs     zTestProcess.test_zombie_processc CsBt ¡}tjdt d¡d}| ¡s*t‚|js4t‚WdQRXdS)Nzpsutil.Processr)rO)r/r0r rPr†rür|r{)r2r?r}r6r6r7Ú$test_zombie_process_is_running_w_excs  z0TestProcess.test_zombie_process_is_running_w_excc CsHt ¡}tjdt d¡d"}| | ¡tj¡|js:t ‚WdQRXdS)Nz!psutil._psplatform.Process.statusr)rO) r/r0r rPr†r:r&ršr{r|)r2r?r}r6r6r7Ú test_zombie_process_status_w_exc's z,TestProcess.test_zombie_process_status_w_excc Cs‚dt ¡krF| tjtjd¡t d¡r,t‚| t d¡ ¡d¡dSt d¡}t rZtj nt }| ||j ¡| ||j ¡| ||j¡| ||j¡| ||j¡| ||jtj¡t|ƒ}x˜| |j|j¡D]‚\}}y |ƒ}Wntj k rúYqÒX|dkr| |jd¡qÒ|dkr@t r*dnd}| | ¡|¡qÒ|dkrÒ|sÒt|ƒ‚qÒWts~| dt ¡¡t d¡s~t‚dS)NrrY)rrr*zNT AUTHORITY\SYSTEMÚrootrk)r/rdr=rSr0r›r|r:rar rUrlrBrIrcrdrArKrCrDr!r•ÚgettersZsettersrr*rr‘)r2r?rËr—r“rkrÂr€r6r6r7Ú test_pid_01s:     zTestProcess.test_pid_0cCsHdd„}d|_t ¡}|| ¡ƒ}|tj ¡ƒ}tsDtrD| ||¡dS)NcSsb| dd¡| dd¡| dd¡trL| dd¡| dd¡| dd¡tdd„| ¡DƒƒS) NZPSUTIL_TESTINGÚPLATÚ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Údictrx)rˆr6r6r7Ú clean_dictZs      z,TestProcess.test_environ..clean_dict) ZmaxDiffr/r0r-r;Úcopyrrr:)r2r«r?Zd1Zd2r6r6r7Ú test_environXs zTestProcess.test_environcCsÊt d¡}| ¡}t||d|j|gtjtjd}t |j ¡}t |j ƒ|  ¡sVt ‚|  |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)ÚstdinrXrrr?Ú3)ÚAÚCr)ÚtextwrapÚdedentr¨rr.r[r\r/r0r1r,rür|r:rXr¢rrr-rUÚ communicateÚ returncode)r2rGr›r5r?Úenvr6r6r7Útest_weird_environos&      zTestProcess.test_weird_environN)jÚ__name__Ú __module__Ú __qualname__Ú__doc__r8r@rHrJrMr+ÚskipIfr rVr^rerirmrprzr~r‰rrr“r˜rrr)rr®rr¸r rºrrÃrÄrÌrÎrÏrÔrÕrrÙr&r(rrÜràrärr÷rúrûrýrrr#r rrr rrrrr%r(r/r2r3rr=r@rGrrrQrWr\rrr_rbrfrgrirkrorpr{r|rr€r‰rŒrr’r˜rržrŸr¢rr­r·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. rcsXtƒj||ŽxDdd„t|ƒDƒD].}t||ƒ‰‡fdd„}t||t ||¡ƒq"WdS)NcSsg|]}| d¡r|‘qS)Útest)r»)r¼rxr6r6r7r½¬sz0LimitedUserTestCase.__init__..cs&y ˆƒWntjk r YnXdS)N)r/rU)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)Nrjzexception not raised)r/r0r#rUro)r2r6r6r7r%Às zLimitedUserTestCase.test_nicerYzcauses problem as rootcCsdS)Nr6)r2r6r6r7rÈsz'LimitedUserTestCase.test_zombie_process)r¸r¹rºr»rr;rrÊrrËrÁrÇrÌr%r+r¼rÚ __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);)ÚstdoutrXrhrZ)r$r/ÚPopenr[r\rkrr®Z assertTruer¿r=r>r‡rIr r:rBrCrD)r2r]Úprocr6r6r7Ú test_miscÙs   zTestPopen.test_miscc Csftjtdgtjtjtjd}| ¡WdQRX|jjss”                                           [48