U =_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)6Tests 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) TestProcessrcOs|j||}t|jSN)spawn_testprocpsutilProcesspid)selfargskwargssprocr9L/opt/alt/python38/lib64/python3.8/site-packages/psutil/tests/test_process.py spawn_psprocNs zTestProcess.spawn_psprocc Cs:t}||jt|t d|_W5QRXdS)N!)r2r3 assertEqualr4osgetpid assertRaisesAttributeErrorr5pr9r9r:test_pidTs zTestProcess.test_pidcCsJ|}||}tr,||tjn||tj ||dSr0) r;killwaitr r=signalSIGTERMSIGKILLassertProcessGoner5rCcoder9r9r: test_killZszTestProcess.test_killcCsJ|}||}tr,||tjn||tj ||dSr0)r; terminaterFr r=rGrHrJrKr9r9r:test_terminatedszTestProcess.test_terminatecCsXtr tjntj}|}|||}tr<|||n||| | |dSr0) r rGrIrHr; send_signalrFr r=rJ)r5sigrCrLr9r9r:test_send_signalns zTestProcess.test_send_signalz not POSIXc Cstj}|}tjdttjdd|t j |j |W5QRX|}tjdttj dd|t j |j |W5QRXdS)Nzpsutil.os.kill side_effect)rGrHr;r!patchOSErrorerrnoZESRCHr@r2 NoSuchProcessrPZEPERM AccessDenied)r5rQrCr9r9r:test_send_signal_mockedys  z#TestProcess.test_send_signal_mockedcCstddg}||}|}||d||tddg}|j|tjd}|}||d||tddg}||}|}||d||tdd g}||}|}||d||dS) N-cpassrz1 / 0)stderrzimport sys; sys.exit(5);zimport os; os._exit(5);)r%r;rFr=rJ subprocessPIPE)r5cmdrCrLr9r9r:test_wait_exiteds(              zTestProcess.test_wait_exitedcCs|}tr|tj|jtj|jdd|tj |jtj|jdd|tj | |tj | |tj nd| |jtj|jdd| |jtj|jdd|| |tj | |tj dS)NMbP?)timeout)r;r rPrGSIGSTOPr@r2TimeoutExpiredrFSIGCONTrHr=suspendresumerNrBr9r9r:test_wait_stoppeds    zTestProcess.test_wait_stoppedcCs|\}}|tj|jd|tj|jd|||}|}trr||tj ||dn||tj ||tj dS)N{Gz?) spawn_children_pairr@r2rhrFrNr r=rGrH)r5child grandchildZ child_retZgrandchild_retr9r9r:test_wait_non_childrens z"TestProcess.test_wait_non_childrencCsH|}||tj|jd|tj|jd|t|jddS)Nrmr)r;namer@r2rhrF ValueErrorrBr9r9r:test_wait_timeouts zTestProcess.test_wait_timeoutcCs|}|tj|jd|tt}t|krfz|d}WqpWq.tjk rbYq.Xq.|dt r| |t j n| |t j ||dS)Nrrf)r;r@r2rhrFrEtimerfailr r=rGrIrHrJ)r5rCZstop_atrLr9r9r:test_wait_timeout_nonblockings    z)TestProcess.test_wait_timeout_nonblockingc Csxt}|jdd|jddtdD](}|jdd}||t||dq(|t|jddW5QRXdS)Nre)Zintervaldgrr) r2r3 cpu_percentrangeassertIsInstancefloatassertGreaterEqualr@rt)r5rCxZpercentr9r9r:test_cpu_percents      zTestProcess.test_cpu_percentc Cs*tjddd}tW5QRXdS)Nzpsutil.cpu_count)Z return_value)r!rVr2r3rz)r5mr9r9r:test_cpu_percent_numcpus_nones z)TestProcess.test_cpu_percent_numcpus_nonec Cs8t}tr|jD]}tdtt||qdS)Nz%H:%M:%S) r2r3 cpu_timesr_fieldsrvstrftime localtimegetattr)r5timesrsr9r9r:test_cpu_timess  zTestProcess.test_cpu_timescCstdd\}}tdd\}}t||gt||gdkrZ|d||ft||gt||gdkr|d||fdS)N皙?zexpected: %s, found: %s)r2r3rr>rmaxminrw)r5 user_timeZ kernel_timeutimeZktimer9r9r:test_cpu_times_2s zTestProcess.test_cpu_times_2z not supportedcCsPt}|}||dtdkr4||d||ttdSNrr_)r2r3Zcpu_numr~ cpu_countr=assertInr{)r5rCZnumr9r9r: 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)r;rv create_timeabsrwrr)r5rCZnowr differencer9r9r:test_create_times zTestProcess.test_create_timez POSIX onlycCs4t}|dk r0tjtd}|||dS)Ntty)r2r3terminalr>pathrealpathr)r=)r5rrr9r9r: test_terminal's zTestProcess.test_terminal)Zonly_ifc Cst}|}ttd}|W5QRX|}tsts||j |j | |j |j t r||j |j | |j|jn ||j|j||j|j|}t|d.}tr|tdddn|ddW5QRX|}||j |j ||j|j||j |j ||j|jt r\||j|j||j |j tt|D]:}tr|dkrqh|||d|||dqhdS)Nrbwbri@Basciirr)r2r3Z io_countersopenr%readrr assertGreaterZ read_countr=Z write_countrZ read_charsZ write_charsr~Z read_bytesZ write_bytes get_testfnrwritebytesr{len)r5rCZio1fZio2ir9r9r:test_io_counters.s> zTestProcess.test_io_countersz linux onlyc Cst}ts"||dtj|tjd|tjd|tjd|tjd|}z4|tj|t |tjdf| t |jtjddW5QRX|tj|t |tjdf|jtjdd|t |tjdf| t |jtjddW5QRXz|jtjddWntj k rTYnX| t d|jtjd| t d|jtjd|j t d |jddW5|\}}|tjkrd}|||XdS) Nrr_rvaluezioclass accepts no valuez$'ioclass' argument must be specified)r2r3rr=ioniceZIOPRIO_CLASS_NONEZIOPRIO_CLASS_RTZIOPRIO_CLASS_BEZIOPRIO_CLASS_IDLEtupler@rtrZassertRaisesRegex)r5rCinitZioclassrr9r9r:test_ionice_linuxYs^      zTestProcess.test_ionice_linuxz!not supported on this win versionc Cst}ts||tj|}z|tj||tj|tj||tjz|tjWntj k rYnX||tj|j t d|jtjdd| t d|jtjdW5||XdS)Nz&value argument not accepted on Windowsr_rzis not a valid priority) r2r3rr=rZ IOPRIO_NORMALZIOPRIO_VERYLOWZ IOPRIO_LOWZ IOPRIO_HIGHrZr TypeErrorrt)r5rCrr9r9r:test_ionice_wins8  zTestProcess.test_ionice_wincCsddl}tt}ddttD}|D]}tt|}||d|t|kr||t||t rjq,|| || |q,| |}|t |d||dd||ddq,dS)NrcSsg|]}|dr|qS)ZRLIMIT startswith.0rr9r9r: s z/TestProcess.test_rlimit_get..rrrr_) resourcer2r3r>r?dirrr~r=r$rlimitZ getrlimitr)r5rrCnamesrsrretr9r9r:test_rlimit_gets    zTestProcess.test_rlimit_getc Cs|}|tjd||tjdtrX|tdtj ddW5QRX| t|tjdW5QRXdS)N)r`r`zcan't use prlimitr)r`r`r`) r;rr2Z RLIMIT_NOFILEr=rrrtZ _psplatformr3r@rBr9r9r:test_rlimit_sets zTestProcess.test_rlimit_setc Cst}|}|tj\}}z|tjd|ft|d}|dW5QRX|t &}t|d}|dW5QRXW5QRX|t r|j j n|j dt j W5|tj||f||tj||fXdS)NrsXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXsXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr)r2r3rr RLIMIT_FSIZEr=rrr@IOErrorrZ exceptionrXZEFBIG)r5rCtestfnsofthardrexcr9r9r: test_rlimits   zTestProcess.test_rlimitc Cst}|tj\}}zN|tjd|f|tjtj|ft|d}|dW5QRXW5|tj||f||tj||fXdS)NrrsXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX) r2r3rrr= RLIM_INFINITYrrr)r5rCrrrr9r9r:test_rlimit_infinitysz TestProcess.test_rlimit_infinitycCs<t}|tj\}}|tj||tj||fdSr0)r2r3rrr=r)r5rCrrr9r9r:test_rlimit_infinity_valuesz&TestProcess.test_rlimit_infinity_valuec Csrt}tr.r)ZdeltacSsg|] }|jqSr9)rrr9r9r:r0s) r;rrr2rZr-rZassertAlmostEqualrusersumsystemrBr9r9r:test_threads_2 s$  zTestProcess.test_threads_2c Cst}|dd\}}|}||d||ddgd}|dd\}}|}|||||||||~tr|} || j| j || j | j |} | j D]} |t | | dqdS)Nrri`)r2r3Z memory_infomemory_percentrr~r r=ZrssZwsetvmsZpagefilerr) r5rCZrss1Zvms1Zpercent1ZmemarrZrss2Zvms2Zpercent2memrsr9r9r:test_memory_info2s&       zTestProcess.test_memory_infocCst}tj}|}|jD]J}t||}|j|d||fd|dkrNts t rTq |j |||||fdq t sxt sxt r||j dt r||jd||jddS)Nr)msgr)r2r3Zvirtual_memorytotalZmemory_full_inforrr~r rZassertLessEqualr russZpssZswap)r5rCrrrsrr9r9r:test_memory_full_infoQs    z!TestProcess.test_memory_full_infoc Cs2t}|}dd|D}|t|tt||jdd}|D]}|jdsFtrzWqt k rt svn,t d}| }W5QRXd|j|krYqXqFdt j|jkrFzt |j}WqFtk rYqFXqF|D]D}|jD]8} t|| } | d krqq| d krq|| ttfqqdS) NcSsg|]}|qSr9r9rr9r9r:resz0TestProcess.test_memory_maps..F)Zgrouped[z/proc/self/smapsz %s (deleted)Z64r)ZaddrZperms)r2r3 memory_mapsr=rsetrrr AssertionErrorrr rr>basenamestatrrrr|intr) r5rCmapspathsZext_mapsntrdatastZfnamerr9r9r:test_memory_mapsas@        zTestProcess.test_memory_mapsc sLt}t4}ddfdd|D}|||W5QRXdS)NcSstjtj|Sr0)r>rrnormcase)rCr9r9r:normpathsz8TestProcess.test_memory_maps_lists_lib..normpathcsg|]}|jqSr9)rrrr9r:rsz:TestProcess.test_memory_maps_lists_lib..)r2r3rrr)r5rCrZlibpathsr9rr:test_memory_maps_lists_libs z&TestProcess.test_memory_maps_lists_libcCs>t}||jt|jddts.ts.tr:|jdddS)Nz?!?)Zmemtyper)r2r3rr@rtrrr rBr9r9r:test_memory_percents  zTestProcess.test_memory_percentcCs|}||dSr0)r;rErFrBr9r9r:test_is_runningszTestProcess.test_is_runningc Cs|}|}z||tWntk rtrbt|ttkrbtjj }||||tnNdt j dt j df}z || |dt |dWntk rYnXYnXt |ddg}||ddS)Nz%s.%srr_rSr\zimport os; print('hey')Zhey)r;exer=r%rr rr>rrsys version_inforeplacer))r5rCrrZveroutr9r9r:test_exes"  zTestProcess.test_execCsVtddg}||}ts ts tr6||dtn|d|d|dS)Nr\zimport time; time.sleep(60)r )r%r;rrrr=cmdlinejoin)r5rrCr9r9r: test_cmdlines    zTestProcess.test_cmdlinezbroken on PYPYcCs>|}t||gdgd}||}|||dS)N 0123456789)rrr;r=r)r5rrrCr9r9r:test_long_cmdlines  zTestProcess.test_long_cmdlinecCs4|t}|}tjtjtj }dSr0) r;r%rslowerr>rrrr executable)r5rCrsZpyexer9r9r: test_names  zTestProcess.test_namezunreliable on PYPYcCs:|jdd}t|||}||tj|dS)NZ01234567890123456789suffix)rrr;r=rsr>rr)r5rrCr9r9r:test_long_names  zTestProcess.test_long_namezbroken on SUNOSz broken on AIXcCs||jdd}t||ddddddg}||}|||||tj||tj | tj |dS)Nz foo bar )r r\z9import time; [time.sleep(0.01) for x in range(3000)];arg1Zarg2rSZarg3) rrr;r=rrsr>rrrr)r5Z funky_pathrrCr9r9r:test_prog_w_funky_names   z"TestProcess.test_prog_w_funky_namecCsXt}|\}}}||t||tttdrT|t|dSN getresuid) r2r3uidsr=r>getuidgeteuidhasattrrr5rCrealZ effectiveZsavedr9r9r: test_uidss  zTestProcess.test_uidscCsXt}|\}}}||t||tttdrT|t|dSr ) r2r3gidsr=r>getgidgetegidr getresgidrr9r9r: test_gids s  zTestProcess.test_gidscCsvt}|t|jd|}z$trtjtjtj tj tj tj fD]R}|j |d<z||Wntjk rzYnX|||W5QRXqDnzttdr|ttjt||d||dttdr|ttjt|ts(|d||dWntjk rBYnXW5z||Wntjk rnYnXXdS)Nstr)prio getpriorityr_r)r2r3r@rnicerZr ZNORMAL_PRIORITY_CLASSZIDLE_PRIORITY_CLASSZBELOW_NORMAL_PRIORITY_CLASSZREALTIME_PRIORITY_CLASSZHIGH_PRIORITY_CLASSZABOVE_NORMAL_PRIORITY_CLASSZsubTestr=rr>r PRIO_PROCESSr?r)r5rCrrr9r9r: test_nicesP     zTestProcess.test_nicecCst}||tjdSr0)r2r3r=statusZSTATUS_RUNNINGrBr9r9r: test_statusCszTestProcess.test_statuscCsd|}|}trP|d\}}||tdtjkr`||tjdn||tdS)N\Z USERDOMAIN) r;usernamer splitr=getpassZgetuserr>environ)r5rCr$Zdomainr9r9r: test_usernameGs zTestProcess.test_usernamecCs |}||tdSr0)r;r=cwdr>getcwdrBr9r9r:test_cwdRszTestProcess.test_cwdcCs$tddg}||}t|jddS)Nr\z/import os, time; os.chdir('..'); time.sleep(60)z#ret == os.path.dirname(os.getcwd()))r%r;rr))r5rcrCr9r9r: test_cwd_2Vs  zTestProcess.test_cwd_2cCszt}|}||j|ttdr@||tt|j |t |t t |tt t tj dd}|D]j}||g|||gttdr||tt|j t|drt||d|qt|gtr|||jn|||ttdr@||tt|j |t|jd|||t ||t|dS)Nsched_getaffinityTZpercpunum_cpurr_)r2r3 cpu_affinity addCleanuprr>r=listr-r4rrr{rzr/r_procZ_get_eligible_cpusr@rr)r5rCinitialZall_cpusnr9r9r:test_cpu_affinity\s8         zTestProcess.test_cpu_affinitycCsp|}ttjdddg}|t|j||t|jtdd|t|jddg|t|jddgdS) NTr. i'i*r1rr) r;rr2rr@rtr0r{r)r5rCZ invalid_cpur9r9r:test_cpu_affinity_errss z"TestProcess.test_cpu_affinity_errscCst}|}||j|t|dkr6|dd}g}tdt|dD](}t||D]}|r\|t |q\qL|D]&}||| t |t |qzdS)N rr_) r2r3r0r1rr{ itertools combinationsappendr2r=sorted)r5rCr4ZcombosrZsubsetZcombor9r9r:"test_cpu_affinity_all_combinationss   z.TestProcess.test_cpu_affinity_all_combinationsz broken on BSDzunreliable on APPVEYORc Cs&t}|}|}|||t|dt}|d|t|jdt |}dd|D}| t j ||tr|D]}|j |kr||jdqW5QRX|D]}qd|}|td|g}td D].}d d|D}||krqtd q| t j |||D]}qdS) Nrsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzlen(ret) != %icSsg|]}tj|jqSr9r>rrrr9r9r:rsz/TestProcess.test_open_files..rz2import time; f = open(r'%s', 'r'); time.sleep(60);r\rycSsg|]}tj|jqSr9r@rr9r9r:rsrm)r2r3r open_files assertNotInrrflushrrrr>rrrr=Zpositionr;r%r{rvsleep) r5rCrfilesr filenamesfilerrr9r9r:test_open_filess4      zTestProcess.test_open_filesc Cst}tjj}|}t|d}|D]*}||j||jksR|j | kr,qnq,| dt || ||j||jtr| |j dn| |j | |d}| |d|j| |d|j ||j|W5QRXdS)Nwzno file found; files=%srrrr_)r2r3r>rrrrrArsfdfilenorwreprr=r rB)r5rCrrZfileobjrGZntupler9r9r:test_open_files_2s$    zTestProcess.test_open_files_2cCst}|}|}t|d}||j|||dt}||j|||d|||||dS)NrIr_r) r2r3rZnum_fdsrr1closer=socket)r5rCrstartrGZsockr9r9r: test_num_fdss   zTestProcess.test_num_fdsz not reliable on OPENBSD & NETBSDcCsJt}t|}tdD]}t|}||krdSq|ddS)Ni z7num ctx switches still the same after 50.000 iterations)r2r3rZnum_ctx_switchesr{rw)r5rCZbeforerZafterr9r9r:test_num_ctx_switchess   z!TestProcess.test_num_ctx_switchescCsNt}ttdr&||t|}||tt rJdSdS)Ngetppid) r2r3rr>r=ppidrSr;r?rrBr9r9r: test_ppids zTestProcess.test_ppidcCsB|}||jttd}|t |dSr) r;r=parentr4r>r?r2pids assertIsNoner3)r5rCZ lowest_pidr9r9r: test_parents zTestProcess.test_parentcCs8t}|\}}||||||dSr0)r2r3rnr=rVr5rVrorpr9r9r:test_parent_multis zTestProcess.test_parent_multic Cs<|}tjdtddd||W5QRXdS)Npsutil.ProcessrfoorT)r;r!rVr2rYrXrVrBr9r9r:test_parent_disappeareds  z#TestProcess.test_parent_disappearedcCsTt}|\}}||d|||d|||d|dSr)r2r3rnr=parentsrZr9r9r: test_parentss  zTestProcess.test_parentscCst}||g||jddg|jdd}|}|jdd}||fD]>}|t|d||dj|j||d|jqTdS)NT recursiver)Z creationflagsr_)r2r3r=childrenr;rr4rT)r5rVroZ children1Z children2rcr9r9r: test_children%s   zTestProcess.test_childrencCsft}|\}}|||g||jdd||g||||jddgdS)NTra)r2r3rnr=rcrNrFrZr9r9r:test_children_recursive4s z#TestProcess.test_children_recursivec Cstt}tD]4}z||d7<Wqtjk rDYqXqt|ddddd}t rz|dkrz| dt |}z|j dd }Wntj k rYnX|t|tt|dS) Nr_cSs|dS)Nr_r9)rr9r9r:Jz6TestProcess.test_children_duplicates..)keyrrrzPID 0Tra) collections defaultdictrr2 process_iterrTErrorr>itemsrZskipTestr3rcrZr=rr)r5tablerCr4cr9r9r:test_children_duplicatesAs     z$TestProcess.test_children_duplicatescCs|t}|\}}|jdd}|t|d||d|||d||}||d|||d|dS)NTrarrr_)r2r3rnrcr=rr_)r5rVrorprcr_r9r9r:test_parents_and_childrenUs  z%TestProcess.test_parents_and_childrencCsX|}|tdD] }|tjkr.q:tdq|| |tjdS)Nryrm) r;rjr{r!r2ZSTATUS_STOPPEDrvrDrkassertNotEqual)r5rCrr9r9r:test_suspend_resumebs  zTestProcess.test_suspend_resumecCs$|ttjd|ttjddS)Nr8rr)r@rr2r3rtr5r9r9r:test_invalid_pidlszTestProcess.test_invalid_pidc Cst}|jddgd}|t|ddgttt}|jdgdd}t|dt sp||ddt j ddtj d "||jd gd dd d iW5QRXt j ddt |jdd |jtj |jd gdW5QRXt j ddt|jdd "||jd gddd diW5QRXt j ddtd F|}|d t ||t|jd gdW5QRXW5QRX|t|dW5QRX|t|dgW5QRX|t|dd gW5QRXdS) Nrrs)attrsZ connectionsr])rvZad_valuezpsutil.Process.niceT)ZcreaterUrr_Zbar)r2r3as_dictr=r>keysrrW isinstancer2r!rVrZrYr4r@ ZombieProcessNotImplementedErrorrBrrt)r5rCdr9r9r: test_as_dictpsT   "   zTestProcess.test_as_dictc Cst}td8}|||W5QRX||jdW5QRXtd}||W5QRX||jddS)N$psutil._psplatform.Process.cpu_timesr_rr2r3r!rVoneshotrr=Z call_countr5rCrr9r9r: test_oneshots   zTestProcess.test_oneshotc Cst}td}tdj}|:|||||W5QRXW5QRX||jd||jdW5QRXW5QRXtd}||W5QRX||jddS)Nr~z(psutil._psplatform.Process.oneshot_enterr_rr)r5rCZm1Zm2rr9r9r:test_oneshot_twices    " zTestProcess.test_oneshot_twicec Cs|\}}|}|}||||&||||||W5QRX|&||||||W5QRXdSr0)rnrTrrrr=)r5Zp1Zp2Zp1_ppidZp2_ppidr9r9r:test_oneshot_caches    zTestProcess.test_oneshot_cachecsfdd}}||tr:ttjd|j|t |}| |j D]\}}|||qXtrt st jj}|||tdS)Ncsz |}WnTtjk r"Yn`tjk r6YnLtjk r^trX|dkrXYdSYn$Xtrp|dkrpdSd||fdS)N)rr)rrsz+%r didn't raise NSP and returned %r instead)r2rzrYrZrr rw)funZfun_namerrtr9r:assert_raises_nsps   zFTestProcess.test_halfway_terminated_process..assert_raises_nspz %s not in ret)r;rNrFr rr2rWr4rJr"iterallrr>rrr=rr%)r5rrCnsrrsrr9rtr:test_halfway_terminated_processs   z+TestProcess.test_halfway_terminated_processcCsdd}|\}}t|j}||tj|t|}| |j D]\}}||qN| |jt | |jddt Dit_| |jddt DdS)Nc Ss*z|WStjtjfk r$YnXdSr0)r2rzrZ)rr9r9r:succeed_or_zombie_p_excsz@TestProcess.test_zombie_process..succeed_or_zombie_p_exccSsg|] }|jqSr9r4rr9r9r:rsz3TestProcess.test_zombie_process..cSsg|] }|jqSr9rrr9r9r:rs)Z spawn_zombier2r3r4r=r! STATUS_ZOMBIErwr"rrrrWrkZ_pmap)r5rrVZzombieZzprocrrrsr9r9r:test_zombie_processs    zTestProcess.test_zombie_processc Cs,t}tjdtdd}W5QRXdS)Nr\rrT)r2r3r!rVrzrr9r9r:$test_zombie_process_is_running_w_excs z0TestProcess.test_zombie_process_is_running_w_excc Cs>t}tjdtdd}||tjW5QRXdS)Nz!psutil._psplatform.Process.statusrrT)r2r3r!rVrzr=r!rrr9r9r: test_zombie_process_status_w_exc'sz,TestProcess.test_zombie_process_status_w_excc CsTdtkr8|tjtjd|tdddStd}trLtjnt }|||j |||j |||j |||j |||j|||jtjt|}||j|jD]v\}}z |}Wntjk rYqX|dkr||jdq|dkr0trdnd}|||q|dkrqtsP|dtdS)Nrr_)rrr$zNT AUTHORITY\SYSTEMrootrs)r2rWr@rYr3r=rTr rZrtrFrNrjrkrErPrGrHr"rZgettersZsettersrr$rr)r5rCrrrrsrrr9r9r: test_pid_01s8     zTestProcess.test_pid_0cCsHdd}d|_t}||}|tj}tsDtrD|||dS)NcSsb|dd|dd|ddtrL|dd|dd|ddtdd|DS) NZPSUTIL_TESTINGZPLATHOMEZ__CF_USER_TEXT_ENCODINGZVERSIONER_PYTHON_PREFER_32_BITZVERSIONER_PYTHON_VERSIONcSs8g|]0\}}|dddd|ddddfqS) rS )r)rkvr9r9r:rdsz@TestProcess.test_environ..clean_dict..)poprdictrm)r|r9r9r: clean_dictZs      z,TestProcess.test_environ..clean_dict) ZmaxDiffr2r3r'r>copyr rr=)r5rrCZd1Zd2r9r9r: test_environXs zTestProcess.test_environcCstd}|}t||d|j|gtjtjd}t|j }t |j | |j dtrtrz |}Wqtjk rYdSXn|}| |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)stdinr^rgr83)ACr)textwrapdedentrrr1rarbr2r3r4r.r=r^rrrr'rZ communicate returncode)r5rLrr8rCenvr9r9r:test_weird_environos(      zTestProcess.test_weird_environN)j__name__ __module__ __qualname____doc__r;rDrMrOrRr-skipIfr r[rdrlrqrurxrrrrrrrrrr+rrrrr rrrrrrrrrr rr(r*rrrrrrrrrrrr$rrr r rr rrr r"r(r+r,rr6r9r?rrrHrMrQrrrRrUrYr[r^r`rdrerprqrsrur}rrrrrrrrrrrr9r9r9r:r/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. rcsTtj||ddt|DD].}t||fdd}t||t||q dS)NcSsg|]}|dr|qS)Ztestrrr9r9r:rs z0LimitedUserTestCase.__init__..cs&z Wntjk r YnXdSr0)r2rZrtZmethr9r:test_s z+LimitedUserTestCase.__init__..test_)r__init__rrsetattrtypes MethodType)r5r6r7attrr __class__rr:rs   zLimitedUserTestCase.__init__cs"ttdtddS)Ni)rsetUpr>setegidseteuidrtrr9r:rs  zLimitedUserTestCase.setUpcs&t|jt|jtdSr0)r>r PROCESS_UIDr PROCESS_GIDrtearDownrtrr9r:rs  zLimitedUserTestCase.tearDowncCs8ztdWntjk r(Yn X|ddS)Nrrzexception not raised)r2r3rrZrwrtr9r9r:r s zLimitedUserTestCase.test_nicer_zcauses problem as rootcCsdSr0r9rtr9r9r:rsz'LimitedUserTestCase.test_zombie_process)rrrrrr>rrrrrrrr r-rr __classcell__r9r9rr:rs     rc@s4eZdZdZeddZddZddZdd Zd S) TestPopenzTests for psutil.Popen class.cCs tdSr0r&)clsr9r9r: tearDownClassszTestPopen.tearDownClassc Cstddg}tj|tjtjdB}|||j|t || t t |d| W5QRXtr||dtj n||dtjdS)Nr\import time; time.sleep(60);stdoutr^r]r`)r%r2PopenrarbrsrrZ assertTruerr@rArrNr r=rFrGrHr5rcprocr9r9r: test_miscs  zTestPopen.test_miscc CsBtjtdgtjtjtjd}|W5QRX||jddS)Nz-V)rr^rr)r2rr%rarbrr=r)r5rr9r9r:test_ctx_managers zTestPopen.test_ctx_managerc Cstddg}tj|tjtjd}|||tj|j|tj|j |tj|j t j t rtjdkr|tj|j t j|tj|j t jW5QRXdS)Nr\rr)rr)r%r2rrarbrNrFr@rYrErPrGrHr rrZ CTRL_C_EVENTZCTRL_BREAK_EVENTrr9r9r:test_kill_terminates&     zTestPopen.test_kill_terminateN) rrrr classmethodrrrrr9r9r9r:rs   r__main__) run_from_name)ErrirXr&r;r>rGrOrrarrrvrr2rrrrrrr r r r Zpsutil._commonr Zpsutil._compatrrrrZ psutil.testsrrrrrrrrrrrrrrr r!r"r#r$r%r'r(r)r*r+r,r-r.r/rrrrZpsutil.tests.runnerr__file__r9r9r9r:s                                           [48