B =_7@sdZddlZddlZddlZddlZddlZddlZddlZddlZddl 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 mdkrGd0d1d1e=Z?Gd2d3d3e2Z@eAd4krdd5lBmCZCeCeDdS)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@seZdZdZddZddZddZdd Zd d Ze e d d dZ ddZ ddZddZddZddZddZddZddZdd 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/d0d1Z!e e" d!d2d3Z#e e" d!d4d5Z$e e" d!d6d7Z%e e" d!d8d9Z&e e" d!d:d;Z'dd?d@Z)e e* d!dAdBZ+e,e-e.d)e e* d!dCdDZ/e,dEdFZ0dGdHZ1e e2 d!dIdJZ3e e2 d!dKdLZ4dMdNZ5dOdPZ6dQdRZ7dSdTZ8e e9dUdVdWZ:dXdYZ;e e9dZd[d\Zd^e e9dUd_d`Z?e e d&dadbZ@e e d&dcddZAdedfZBdgdhZCdidjZDdkdlZEdmdnZFe eG d!dodpZHe eG d!dqdrZIe eG d!dsdtZJe eKdue eLdvdwdxZMe eKdue eLdvdydzZNe e d&d{d|ZOeed)e ePpeQd}d~dZRddZSddZTddZUddZVe,ddZWddZXddZYddZZddZ[ddZ\ddZ]ddZ^ddZ_ddZ`ddZaddZbe e d&ddZce e d&ddZde e d&ddZeddZfe eg d!ddZhe eg d!e e d&ddZidS) TestProcesszTests for psutil.Process class.cOs|j||}t|jS)N)spawn_testprocpsutilProcesspid)selfargskwargssprocr6L/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 assertEqualr1osgetpid assertRaisesAttributeError)r2pr6r6r7test_pidTs zTestProcess.test_pidcCsJ|}||}tr,||tjn||tj ||dS)N) r8killwaitr r:signalSIGTERMSIGKILLassertProcessGone)r2r?coder6r6r7 test_killZszTestProcess.test_killcCsJ|}||}tr,||tjn||tj ||dS)N)r8 terminaterBr r:rCrDrF)r2r?rGr6r6r7test_terminatedszTestProcess.test_terminatecCsXtr tjntj}|}|||}tr<|||n||| | |dS)N) r rCrErDr8 send_signalrBr r:rF)r2sigr?rGr6r6r7test_send_signalns zTestProcess.test_send_signalz not POSIXc Cstj}|}tjdttjdd|t j |j |WdQRX|}tjdttj dd|t j |j |WdQRXdS)Nzpsutil.os.kill) side_effect)rCrDr8r patchOSErrorerrnoZESRCHr=r/ NoSuchProcessrKEPERM AccessDenied)r2rLr?r6r6r7test_send_signal_mockedysz#TestProcess.test_send_signal_mockedcCstddg}||}|}||d||tddg}|j|tjd}|}||d||tddg}||}|}||d||tdd g}||}|}||d||dS) Nz-cpassrz1 / 0)stderrzimport sys; sys.exit(5);zimport os; os._exit(5);)r$r8rBr:rF subprocessPIPE)r2cmdr?rGr6r6r7test_wait_exiteds(              zTestProcess.test_wait_exitedcCs|}tr|tj|jtj|jdd|tj |jtj|jdd|tj | |tj | |tj nd| |jtj|jdd| |jtj|jdd|| |tj | |tj dS)NgMbP?)timeout)r8r rKrCSIGSTOPr=r/TimeoutExpiredrBSIGCONTrDr:suspendresumerI)r2r?r6r6r7test_wait_stoppeds    zTestProcess.test_wait_stoppedcCs|\}}|tj|jd|tj|jd|||}|}trr||tj ||dn||tj ||tj dS)Ng{Gz?) spawn_children_pairr=r/rarBrIr r:rCrD)r2child grandchildZ child_retZgrandchild_retr6r6r7test_wait_non_childrens z"TestProcess.test_wait_non_childrencCsH|}||tj|jd|tj|jd|t|jddS)Ng{Gz?r)r8namer=r/rarB ValueError)r2r?r6r6r7test_wait_timeouts zTestProcess.test_wait_timeoutcCs|}|tj|jd|tt}xBt|krfy|d}PWq0tjk rbYq0Xq0W|dt r| |t j n| |t j ||dS)Nrr_)r8r=r/rarBrAtimerfailr r:rCrErDrF)r2r?Zstop_atrGr6r6r7test_wait_timeout_nonblockings    z)TestProcess.test_wait_timeout_nonblockingc Cs|t}|jdd|jddx4tdD](}|jdd}||t||dq*W|t|jddWdQRXdS)NgMbP?)intervaldgrj) r/r0 cpu_percentrangeassertIsInstancefloatassertGreaterEqualr=rl)r2r?xpercentr6r6r7test_cpu_percents     zTestProcess.test_cpu_percentc Cs4tjddd}t|js&tWdQRXdS)Nzpsutil.cpu_count)Z return_value)r rPr/r0rscalledAssertionError)r2mr6r6r7test_cpu_percent_numcpus_nones z)TestProcess.test_cpu_percent_numcpus_nonec Cst}|jdks(|jdks(t||jdks:t||jdksLt|trb|j dksbt|x&|j D]}t dt t||qjWdS)Ngz%H:%M:%S)r/r0 cpu_timesusersystemr| children_userchildren_systemrZiowait_fieldsrnstrftime localtimegetattr)r2timesrkr6r6r7test_cpu_timess  zTestProcess.test_cpu_timescCstdd\}}tdd\}}t||gt||gdkrZ|d||ft||gt||gdkr|d||fdS)Ng?zexpected: %s, found: %s)r/r0rr;rmaxminro)r2 user_timeZ kernel_timeutimeZktimer6r6r7test_cpu_times_2s zTestProcess.test_cpu_times_2z not supportedcCsPt}|}||dtdkr4||d||ttdS)NrrY)r/r0Zcpu_numrw cpu_countr:assertInrt)r2r?numr6r6r7 test_cpu_nums    zTestProcess.test_cpu_numcCsZ|}t}|}t||}|dkr@|d|||ftdt|dS)Nrz'expected: %s, found: %s, difference: %sz%Y %m %d %H:%M:%S)r8rn create_timeabsrorr)r2r?nowr differencer6r6r7test_create_times zTestProcess.test_create_timez POSIX onlycCs4t}|dk r0tjtd}|||dS)Ntty)r/r0terminalr;pathrealpathr'r:)r2rrr6r6r7 test_terminal's zTestProcess.test_terminal)Zonly_ifc Cst}|}ttd}|WdQRX|}tsts||j |j | |j |j t r||j |j | |j|jn ||j|j||j|j|}t|d.}tr|tdddn|ddWdQRX|}||j |j ||j|j||j |j ||j|jt r\||j|j||j |j xJtt|D]:}tr|dkrqj|||d|||dqjWdS)Nrbwbrxi@Basciirr)r/r0Z io_countersopenr$readrr assertGreater read_countr: write_countrZ read_charsZ write_charsrw read_bytes write_bytes get_testfnrwritebytesrtlen)r2r?Zio1fZio2ir6r6r7test_io_counters.s> zTestProcess.test_io_countersz linux onlyc Cst}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|\}}|tjkrd}|||XdS) NrrYr)valuezioclass accepts no valuez$'ioclass' argument must be specified)r/r0rr:ioniceZIOPRIO_CLASS_NONEZIOPRIO_CLASS_RTZIOPRIO_CLASS_BEZIOPRIO_CLASS_IDLEtupler=rlrUassertRaisesRegex)r2r?initioclassrr6r6r7test_ionice_linuxYsH     zTestProcess.test_ionice_linuxz!not supported on this win versionc Cst}ts||tj|}z|tj||tj|tj||tjy|tjWntj k rYnX||tj|j t d|jtjdd| t d|jtjdWd||XdS)Nz&value argument not accepted on WindowsrY)rzis not a valid priority) r/r0rr:rZ IOPRIO_NORMALZIOPRIO_VERYLOWZ IOPRIO_LOWZ IOPRIO_HIGHrUr TypeErrorrl)r2r?rr6r6r7test_ionice_wins*  zTestProcess.test_ionice_wincCsddl}tt}ddttD}|s4t|x|D]}tt|}||d|t|kr| |t||t rxq:| | || |q:| |}| t |d||dd||ddq:WdS)NrcSsg|]}|dr|qS)ZRLIMIT) startswith).0rxr6r6r7 sz/TestProcess.test_rlimit_get..rrjrY)resourcer/r0r;r<dirr|rrwr:r#rlimitZ getrlimitr)r2rr?namesrkrretr6r6r7test_rlimit_gets       zTestProcess.test_rlimit_getc Cs|}|tjd||tjdtrX|tdtj ddWdQRX| t|tjdWdQRXdS)N)rZrZzcan't use prlimitr)rZrZrZ) r8rr/Z RLIMIT_NOFILEr:rrrlZ _psplatformr0r=)r2r?r6r6r7test_rlimit_sets zTestProcess.test_rlimit_setc Cst}|}|tj\}}z|tjd|ft|d}|dWdQRX|t&}t|d}|dWdQRXWdQRX| t r|j j n|j dt j Wd|tj||f| |tj||fXdS)NirsXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXsXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr)r/r0rr RLIMIT_FSIZErrr=IOErrorr:r exceptionrRZEFBIG)r2r?testfnsofthardrexcr6r6r7 test_rlimits    zTestProcess.test_rlimitc Cst}|tj\}}zN|tjd|f|tjtj|ft|d}|dWdQRXWd|tj||f||tj||fXdS)NirsXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX) r/r0rr RLIM_INFINITYrrrr:)r2r?rrrr6r6r7test_rlimit_infinitysz TestProcess.test_rlimit_infinitycCs<t}|tj\}}|tj||tj||fdS)N)r/r0rrr:r)r2r?rrr6r6r7test_rlimit_infinity_valuesz&TestProcess.test_rlimit_infinity_valuec Csrt}tr.g?)deltacSsg|] }|jqSr6)r)rrxr6r6r7r0s) r8rrr/rUr+rZassertAlmostEqualrrsumr)r2r?r6r6r7test_threads_2 s  zTestProcess.test_threads_2c Cst}|dd\}}|}||d||ddgd}|dd\}}|}|||||||||~tr|} || j| j || j | j |} x | j D]} |t | | dqWdS)Nrri`)r/r0Z memory_infomemory_percentrrwr r:ZrssZwsetvmsZpagefilerr) r2r?Zrss1Zvms1Zpercent1ZmemarrZrss2Zvms2Zpercent2memrkr6r6r7test_memory_info2s&       zTestProcess.test_memory_infocCst}tj}|}xT|jD]J}t||}|j|d||fd|dkrPts"t rVq"|j |||||fdq"Wt s|t s|t r||j dt r||jd||jddS)Nr)msgr)r/r0Zvirtual_memorytotalZmemory_full_inforrrwrrZassertLessEqualr russZpssZswap)r2r?rrrkrr6r6r7test_memory_full_infoQs    z!TestProcess.test_memory_full_infoc Cst}|}dd|D}|t|tt||jdd}x|D]}|jdsJtj |jsrt |jt ry*tj |jstj |jst |jWnHt k rtsn,td}|}WdQRXd|j|krYnXqJdtj|jkrJyt|j}Wntk r$YqJXt|jsJt |jqJWxv|D]n}xf|jD]\} t|| } | d krpqRn<| d kr| st | n"|| ttf| d ksRt | qRWqFWdS) NcSsg|]}|qSr6r6)rrxr6r6r7resz0TestProcess.test_memory_maps..F)Zgrouped[z/proc/self/smapsz %s (deleted)Z64r)addrZpermsr)r/r0 memory_mapsr:rsetrrr;isabsr|r existsislinkrr rbasenamestatr S_ISREGst_moderrruintr) r2r?mapspathsZext_mapsntrdatastfnamerr6r6r7test_memory_mapsasD          zTestProcess.test_memory_mapsc sLt}t4}ddfdd|D}|||WdQRXdS)NcSstjtj|S)N)r;rrnormcase)r?r6r6r7normpathsz8TestProcess.test_memory_maps_lists_lib..normpathcsg|]}|jqSr6)r)rrx)rr6r7rsz:TestProcess.test_memory_maps_lists_lib..)r/r0rrr)r2r?rZlibpathsr6)rr7test_memory_maps_lists_libs   z&TestProcess.test_memory_maps_lists_libcCs>t}||jt|jddts.ts.tr:|jdddS)Nz?!?)Zmemtyper)r/r0rr=rlrrr )r2r?r6r6r7test_memory_percents  zTestProcess.test_memory_percentcCsL|}|st|s t|||r|}t||gdgd}||}|||dS)N 0123456789)rrr8r:r)r2rrr?r6r6r7test_long_cmdlines  zTestProcess.test_long_cmdlinecCsJ|t}|}tjtjtj }| |sFt ||fdS)N) r8r$rklowerr;rrrr executablerr|)r2r?rkZpyexer6r6r7 test_names  zTestProcess.test_namezunreliable on PYPYcCs:|jdd}t|||}||tj|dS)NZ01234567890123456789)suffix)rrr8r:rkr;rr)r2rr?r6r6r7test_long_names  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) rrr8r:rrkr;rrrr)r2Z funky_pathrr?r6r6r7test_prog_w_funky_names   z"TestProcess.test_prog_w_funky_namecCsXt}|\}}}||t||tttdrT|t|dS)N getresuid) r/r0uidsr:r;getuidgeteuidhasattrr)r2r?real effectivesavedr6r6r7 test_uidss  zTestProcess.test_uidscCsXt}|\}}}||t||tttdrT|t|dS)Nr) r/r0gidsr:r;getgidgetegidr getresgid)r2r?rrrr6r6r7 test_gids s  zTestProcess.test_gidscCszt}|t|jd|}z(trxrtjtjtjtj tj tj gD]R}|j |d<y||Wntj k r|YnX|||WdQRXqFWnyttdr|ttjt||d||dttdr |ttjt|ts,|d||dWntj k rFYnXWdy||Wntj k rrYnXXdS)Nstr)prio getpriorityrYr)r/r0r=rnicer ZNORMAL_PRIORITY_CLASSZIDLE_PRIORITY_CLASSZBELOW_NORMAL_PRIORITY_CLASSZREALTIME_PRIORITY_CLASSZHIGH_PRIORITY_CLASSZABOVE_NORMAL_PRIORITY_CLASSZsubTestrUr:rr;r" PRIO_PROCESSr<r)r2r?rr!r6r6r7 test_nicesJ         zTestProcess.test_nicecCst}||tjdS)N)r/r0r:statusSTATUS_RUNNING)r2r?r6r6r7 test_statusCszTestProcess.test_statuscCsd|}|}trP|d\}}||tdtjkr`||tjdn||tdS)N\Z USERDOMAIN) r8usernamer splitr:getpassZgetuserr;environ)r2r?r*domainr6r6r7 test_usernameGs zTestProcess.test_usernamecCs |}||tdS)N)r8r:cwdr;getcwd)r2r?r6r6r7test_cwdRszTestProcess.test_cwdcCs$tddg}||}t|jddS)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_2cCst}|}|st|||j|ttdrL||tt |j |t |t t |tt t tjdd}xr|D]j}||g|||gttdr||tt |j t|dr||d|qW|gtr|||jn|||ttdrP||tt |j |t|jd|||t ||t|dS)Nsched_getaffinityT)percpunum_cpurrY)r/r0 cpu_affinityr| addCleanuprr;r:listr4r1rrrtrsr6r_procZ_get_eligible_cpusr=rr)r2r?initialZall_cpusnr6r6r7test_cpu_affinity\s6           zTestProcess.test_cpu_affinitycCsp|}ttjdddg}|t|j||t|jtdd|t|jddg|t|jddgdS) NT)r5 i'i*r1rj) r8rr/rr=rlr7rtr)r2r?Z invalid_cpur6r6r7test_cpu_affinity_errss z"TestProcess.test_cpu_affinity_errscCst}|}|st|||j|t|dkrB|dd}g}xBtdt|dD],}x&t||D]}|rl| t |qlWqZWx.|D]&}||| t |t |qWdS)N rrY) r/r0r7r|r8rrt itertools combinationsappendr9r:sorted)r2r?r;ZcombosrZsubsetcombor6r6r7"test_cpu_affinity_all_combinationss     z.TestProcess.test_cpu_affinity_all_combinationsz broken on BSDzunreliable on APPVEYORc Cs`t}|}|}|||t|dx}|d|t|jdt |}dd|D}| t j ||trx$|D]}|j |kr||jdqWWdQRXx"|D]}t j |j st|qWd|}|td|g}xLtd D],}d d|D}||krPtd qW| t j ||x$|D]}t j |s.iz2import time; f = open(r'%s', 'r'); time.sleep(60);z-crrcSsg|]}tj|jqSr6)r;rr)rrxr6r6r7rsg{Gz?)r/r0r open_files assertNotInrrflushrrrr;rrrr:positionisfiler|r8r$rtrnsleep) r2r?rfilesr filenamesfilerrxr6r6r7test_open_filess4        zTestProcess.test_open_filesc Cst}tjj}|}t|d}xJ|D](}||j||jksT|j | kr.Pq.W| dt || ||j||jtr| |j dn| |j | |d}| |d|j| |d|j ||j|WdQRXdS)Nwzno file found; files=%srjrrY)r/r0r;rrrrrHrkfdfilenororeprr:r rI)r2r?rrfileobjrPZntupler6r6r7test_open_files_2s"  zTestProcess.test_open_files_2cCst}|}|}t|d}||j|||dt}||j|||d|||||dS)NrRrYr) r/r0rZnum_fdsrr8closer:socket)r2r?rstartrPsockr6r6r7 test_num_fdss   zTestProcess.test_num_fdsz not reliable on OPENBSD & NETBSDcCsLt}t|}x(tdD]}t|}||krdSqW|ddS)Ni z7num ctx switches still the same after 50.000 iterations)r/r0rZnum_ctx_switchesrtro)r2r?beforerxafterr6r6r7test_num_ctx_switchess  z!TestProcess.test_num_ctx_switchescCsNt}ttdr&||t|}||tt rJdSdS)Ngetppid) r/r0rr;r:ppidr`r8r<r)r2r?r6r6r7 test_ppids zTestProcess.test_ppidcCsB|}||jttd}|t |dS)Nr) r8r:parentr1r;r<r/pids assertIsNoner0)r2r?Z lowest_pidr6r6r7 test_parents zTestProcess.test_parentcCs8t}|\}}||||||dS)N)r/r0rfr:rc)r2rcrgrhr6r6r7test_parent_multis zTestProcess.test_parent_multic Cs<|}tjdtddd||WdQRXdS)Nzpsutil.Processrfoo)rO)r8r rPr/rSrerc)r2r?r6r6r7test_parent_disappearedsz#TestProcess.test_parent_disappearedcCs`t}|st|\}}||d|||d|||d|dS)NrrY)r/r0parentsr|rfr:)r2rcrgrhr6r6r7 test_parentss   zTestProcess.test_parentscCst}||g||jddg|jdd}|}|jdd}xJ||fD]>}|t|d||dj|j||d|jqVWdS)NT) recursiver) creationflagsrY)r/r0r:childrenr8rr1ra)r2rcrgZ children1Z children2rnr6r6r7 test_children%s  zTestProcess.test_childrencCsft}|\}}|||g||jdd||g||||jddgdS)NT)rl)r/r0rfr:rnrIrB)r2rcrgrhr6r6r7test_children_recursive4s z#TestProcess.test_children_recursivec Cstt}x@tD]4}y||d7<Wqtjk rFYqXqWt|ddddd}t r~|dkr~| dt |}y|j dd }Wntj k rYnX|t|tt|dS) NrYcSs|dS)NrYr6)rxr6r6r7Jz6TestProcess.test_children_duplicates..)keyrjrzPID 0T)rl) collections defaultdictrr/ process_iterraErrorrEitemsrZskipTestr0rnrUr:rr)r2tabler?r1cr6r6r7test_children_duplicatesAs     z$TestProcess.test_children_duplicatescCs|t}|\}}|jdd}|t|d||d|||d||}||d|||d|dS)NT)rlrrrY)r/r0rfrnr:rrj)r2rcrgrhrnrjr6r6r7test_parents_and_childrenUs  z%TestProcess.test_parents_and_childrencCsZ|}|x*tdD]}|tjkr.PtdqW|| |tjdS)Nrrg{Gz?) r8rcrtr&r/STATUS_STOPPEDrnrMrdassertNotEqual)r2r?rxr6r6r7test_suspend_resumebszTestProcess.test_suspend_resumecCs$|ttjd|ttjddS)Nr?rj)r=rr/r0rl)r2r6r6r7test_invalid_pidlszTestProcess.test_invalid_pidc Cst}|jddgd}|t|ddgttt}|jdgdd}t|dt sp||ddt j ddtj d "||jd gd dd d iWdQRXt j ddt |jdd |jtj |jd gdWdQRXt j ddt|jdd "||jd gddd diWdQRXt j ddtd F|}|d t ||t|jd gdWdQRXWdQRX|t|dWdQRX|t|dgWdQRX|t|dd gWdQRXdS) Nrrk)attrsZ connectionsrh)rZad_valuezpsutil.Process.niceT)createrOr#rYZbar)r/r0as_dictr:rEkeysrrd isinstancer9r rPrUrSr1r= ZombieProcessNotImplementedErrorrIrrl)r2r?dr6r6r7 test_as_dictps> ""  "   zTestProcess.test_as_dictc Cst}td8}|||WdQRX||jdWdQRXtd}||WdQRX||jddS)Nz$psutil._psplatform.Process.cpu_timesrYr)r/r0r rPoneshotrr: call_count)r2r?r}r6r6r7 test_oneshots   zTestProcess.test_oneshotc Cst}td}tdj}|:|||||WdQRXWdQRX||jd||jdWdQRXWdQRXtd}||WdQRX||jddS)Nz$psutil._psplatform.Process.cpu_timesz(psutil._psplatform.Process.oneshot_enterrYr)r/r0r rPrrr:r)r2r?m1m2r}r6r6r7test_oneshot_twices    " zTestProcess.test_oneshot_twicec Cs|\}}|}|}||||&||||||WdQRX|&||||||WdQRXdS)N)rfrar~rr:)r2p1p2Zp1_ppidZp2_ppidr6r6r7test_oneshot_caches    zTestProcess.test_oneshot_cachecsfdd}}||tr:ttjd|j|t |}x"| |j D]\}}|||qZWtrt st jj}|||tdS)Ncsy |}WnRtjk r"Yn^tjk r6YnJtjk r\trV|dkrVdSYn$Xtrn|dkrndSd||fdS)N)rr)rrkz+%r didn't raise NSP and returned %r instead)r/rrSrUrr ro)funZfun_namer)r2r6r7assert_raises_nsps   zFTestProcess.test_halfway_terminated_process..assert_raises_nspz %s not in ret)r8rIrBr rr/rdr1rFr!iterallrr;rrr:rr$)r2rr?nsrrkrr6)r2r7test_halfway_terminated_processs  z+TestProcess.test_halfway_terminated_processcCsdd}|\}}t|j}||tj|s>t| t |}x | |j D]\}}||q\Wt |jst||jt||jddtDit_||jddtDdS)Nc Ss(y|Stjtjfk r"YnXdS)N)r/rrU)rr6r6r7succeed_or_zombie_p_excsz@TestProcess.test_zombie_process..succeed_or_zombie_p_exccSsg|] }|jqSr6)r1)rrxr6r6r7rsz3TestProcess.test_zombie_process..cSsg|] }|jqSr6)r1)rrxr6r6r7rs)Z spawn_zombier/r0r1r:r& STATUS_ZOMBIErr|rr!rr pid_existsrrdrvZ_pmap)r2rrczombieZzprocrrrkr6r6r7test_zombie_processs     zTestProcess.test_zombie_processc CsBt}tjdtdd}|s*t|js4tWdQRXdS)Nzpsutil.Processr)rO)r/r0r rPrrr|r{)r2r?r}r6r6r7$test_zombie_process_is_running_w_excs  z0TestProcess.test_zombie_process_is_running_w_excc CsHt}tjdtdd"}||tj|js:t WdQRXdS)Nz!psutil._psplatform.Process.statusr)rO) r/r0r rPrr:r&rr{r|)r2r?r}r6r6r7 test_zombie_process_status_w_exc's z,TestProcess.test_zombie_process_status_w_excc CsdtkrF|tjtjdtdr,t|tdddStd}t rZtj nt }|||j |||j |||j|||j|||j|||jtjt|}x||j|jD]\}}y |}Wntj k rYqX|dkr||jdq|dkr@t r*dnd}|||q|dkr|st|qWts~|dttds~tdS)NrrY)rrr*zNT AUTHORITY\SYSTEMrootrk)r/rdr=rSr0rr|r:rar rUrlrBrIrcrdrArKrCrDr!rgettersZsettersrr*rr)r2r?rrrrkrrr6r6r7 test_pid_01s:     zTestProcess.test_pid_0cCsHdd}d|_t}||}|tj}tsDtrD|||dS)NcSsb|dd|dd|ddtrL|dd|dd|ddtdd|DS) NZPSUTIL_TESTINGPLATHOMEZ__CF_USER_TEXT_ENCODINGZVERSIONER_PYTHON_PREFER_32_BITZVERSIONER_PYTHON_VERSIONcSs8g|]0\}}|dddd|ddddfqS) rN )r)rkvr6r6r7rdsz@TestProcess.test_environ..clean_dict..)poprdictrx)rr6r6r7 clean_dictZs      z,TestProcess.test_environ..clean_dict) ZmaxDiffr/r0r-r;copyrrr:)r2rr?Zd1Zd2r6r6r7 test_environXs zTestProcess.test_environcCstd}|}t||d|j|gtjtjd}t|j }t |j | sVt | |jdtrtry |}Wqtjk rdSXn|}| |ddd|| |jddS) 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)ACr)textwrapdedentrrr.r[r\r/r0r1r,rr|r:rXrrrr-rU communicate returncode)r2rGrr5r?envr6r6r7test_weird_environos&      zTestProcess.test_weird_environN)j__name__ __module__ __qualname____doc__r8r@rHrJrMr+skipIfr rVr^rerirmrprzr~rrrrrrrr)rrrrr rrrrrrrrrrrr&r(rrrrrrrrrrrr#r rrr rrrrr%r(r/r2r3rr=r@rGrrrQrWr\rrr_rbrfrgrirkrorpr{r|rrrrrrrrrrrrrrr6r6r6r7r-Ks         * +   .     , (  #       . *%  ' r-csneZdZdZeedr&eZeZ fddZ fddZ fddZ d d Z ed d d dZZS)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. rcsXtj||xDddt|DD].}t||fdd}t||t||q"WdS)NcSsg|]}|dr|qS)test)r)rrxr6r6r7rsz0LimitedUserTestCase.__init__..cs&y Wntjk r YnXdS)N)r/rU)r2)methr6r7test_s z+LimitedUserTestCase.__init__..test_)r__init__rrsetattrtypes MethodType)r2r3r4attrr) __class__)rr7rs   zLimitedUserTestCase.__init__cs"ttdtddS)Ni)rsetUpr;setegidseteuid)r2)rr6r7rs  zLimitedUserTestCase.setUpcs&t|jt|jtdS)N)r;r PROCESS_UIDr PROCESS_GIDrtearDown)r2)rr6r7rs  zLimitedUserTestCase.tearDowncCs8ytdWntjk r(Yn X|ddS)Nrjzexception not raised)r/r0r#rUro)r2r6r6r7r%s zLimitedUserTestCase.test_nicerYzcauses problem as rootcCsdS)Nr6)r2r6r6r7rsz'LimitedUserTestCase.test_zombie_process)rrrrrr;rrrrrrrr%r+rr __classcell__r6r6)rr7rs    rc@s4eZdZdZeddZddZddZdd Zd S) TestPopenzTests for psutil.Popen class.cCs tdS)N)r%)clsr6r6r7 tearDownClassszTestPopen.tearDownClassc Cstddg}tj|tjtjdB}|||j|t || t t |d| WdQRXtr||dtj n||dtjdS)Nz-czimport time; time.sleep(60);)stdoutrXrhrZ)r$r/Popenr[r\rkrrZ assertTruerr=r>rrIr r:rBrCrD)r2r]procr6r6r7 test_miscs   zTestPopen.test_miscc Csftjtdgtjtjtjd}|WdQRX|jjss                                           [48