3 ̪e_@sdZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlmZddlmZddlmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlm 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.ddl!m/Z/dd l!m0Z0dd!l!m1Z1dd"l!m2Z2dd#l!m3Z3dd$l!m4Z4dd%l!m5Z5dd&l!m6Z6dd'l!m7Z7dd(l!m8Z8dd)l!m9Z9dd*l!m:Z:dd+l!m;Z;dd,l!mZ>dd/l!m?Z?Gd0d1d1e2Z@erejAdkrGd2d3d3e@ZBGd4d5d5e2ZCeDd6krdd7lEmFZFeFeGdS)8zTests for psutil.Process class.N)AIX)BSD)LINUX)MACOS)NETBSD)OPENBSD)OSX)POSIX)SUNOS)WINDOWS) open_text)PY3)FileNotFoundError)long)super)APPVEYOR) CI_TESTING)GITHUB_ACTIONS)GLOBAL_TIMEOUT)HAS_CPU_AFFINITY) HAS_ENVIRON) HAS_IONICE)HAS_MEMORY_MAPS)HAS_PROC_CPU_NUM)HAS_PROC_IO_COUNTERS) HAS_RLIMIT) HAS_THREADS) MACOS_11PLUS)PYPY) PYTHON_EXE)PYTHON_EXE_ENV)PsutilTestCase) ThreadTask) call_until)copyload_shared_lib) create_c_exe) create_py_exe)mock)process_namespace) reap_children)retry_on_failure)sh)skip_on_access_denied)skip_on_not_implemented) wait_for_pidc@seZdZdZddZddZddZdd Zd d Ze j e d d dZ ddZ e j edddZddZddZddZddZddZddZd d!Ze j e d"d#d$Zd%d&Ze j e d'd(d)Ze j e d"eed*d+d,Ze j e d"e j e d-d.d/Z e j e d"e j e! d0d1d2Z"e j e# d"d3d4Z$e j e# d"d5d6Z%e j e# d"d7d8Z&e j e# d"d9d:Z'e j e# d"d;d<Z(d=d>Z)e j e! d?d@dAZ*e j e+ d"dBdCZ,e-e.e/d*e j e+ d"dDdEZ0e-dFdGZ1dHdIZ2e j e3 d"dJdKZ4e j e3 d"dLdMZ5dNdOZ6dPdQZ7dRdSZ8dTdUZ9e j e:dVdWdXZ;dYdZZd^e j e?d_e j e:dVd`daZ@e j e d'dbdcZAe j e d'dddeZBdfdgZCdhdiZDdjdkZEdldmZFdndoZGe j eH d"dpdqZIe j eH d"drdsZJe j eH d"dtduZKe j eLdve j eMdwdxdyZNe j eLdve j eMdwdzd{ZOe j e d'd|d}ZPeed*e j eQped~ddZRddZSddZTddZUe-ddZVddZWddZXddZYddZZddZ[ddZ\ddZ]ddZ^ddZ_ddZ`ddZae j e d'ddZbe j e d'ddZce j e d'ddZdddZeddZfe j eg d"ddZhe j eg d"e j e d'e j eidddZjdS) TestProcesszTests for psutil.Process class.c OsB|j||}y tj|jStjk r<|j|jYnXdS)N)spawn_testprocpsutilProcesspid NoSuchProcessZ assertPidGone)selfargskwargssprocr9E/usr/local/lib64/python3.6/site-packages/psutil/tests/test_process.py spawn_psprocPs    zTestProcess.spawn_psprocc Cs:tj}|j|jtj|jt d|_WdQRXdS)N!)r1r2 assertEqualr3osgetpid assertRaisesAttributeError)r5pr9r9r:test_pidZs zTestProcess.test_pidcCsJ|j}|j|j}tr,|j|tjn|j|tj |j|dS)N) r;killwaitr r=signalSIGTERMSIGKILLassertProcessGone)r5rBcoder9r9r: test_kill`szTestProcess.test_killcCsJ|j}|j|j}tr,|j|tjn|j|tj |j|dS)N)r; terminaterEr r=rFrGrI)r5rBrJr9r9r:test_terminatejszTestProcess.test_terminatecCsXtr tjntj}|j}|j||j}tr<|j||n|j|| |j |dS)N) r rFrHrGr; send_signalrEr r=rI)r5sigrBrJr9r9r:test_send_signalts zTestProcess.test_send_signalz not POSIXcCstj}|j}tjdttjdd|jt j |j |WdQRX|j}tjdttj dd|jt j |j |WdQRXdS)Nzpsutil.os.kill) side_effect)rFrGr;r'patchOSErrorerrnoZESRCHr@r1r4rNEPERM AccessDenied)r5rOrBr9r9r:test_send_signal_mockedsz#TestProcess.test_send_signal_mockedcCstddg}|j|}|j}|j|d|j|tddg}|j|tjd}|j}|j|d|j|tddg}|j|}|j}|j|d|j|tdd g}|j|}|j}|j|d|j|dS) Nz-cpassrz1 / 0)stderrzimport sys; sys.exit(5);zimport os; os._exit(5);)rr;rEr=rI subprocessPIPE)r5cmdrBrJr9r9r:test_wait_exiteds(              zTestProcess.test_wait_exitedzfails on NETBSDcCs|j}tr|jtj|jtj|jdd|jtj |jtj|jdd|jtj |j |jtj |j |jtj nd|j |jtj|jdd|j |jtj|jdd|j|j |jtj |j |jtj dS)NgMbP?)timeout)r;r rNrFSIGSTOPr@r1TimeoutExpiredrESIGCONTrGr=suspendresumerL)r5rBr9r9r:test_wait_stoppeds    zTestProcess.test_wait_stoppedcCs|j\}}|jtj|jd|jtj|jd|j|j|j}|j}trr|j|tj |j|dn|j|tj |j|tj dS)Ng{Gz?) spawn_children_pairr@r1rcrErLr r=rFrG)r5child grandchildZ child_retZgrandchild_retr9r9r:test_wait_non_childrens z"TestProcess.test_wait_non_childrencCsH|j}|j|jtj|jd|jtj|jd|jt|jddS)Ng{Gz?rr[)r;namer@r1rcrE ValueError)r5rBr9r9r:test_wait_timeouts zTestProcess.test_wait_timeoutc Cs|j}|jtj|jd|jtjt}xBtj|krfy|jd}PWq0tjk rbYq0Xq0W|jdt r|j |t j n|j |t j |j|dS)Nrra)r;r@r1rcrErDtimerfailr r=rFrHrGrI)r5rBZstop_atrJr9r9r:test_wait_timeout_nonblockings    z)TestProcess.test_wait_timeout_nonblockingc Cs|tj}|jdd|jddx4tdD](}|jdd}|j|t|j|dq*W|jt|jddWdQRXdS)NgMbP?)intervaldgr[rl) r1r2 cpu_percentrangeassertIsInstancefloatassertGreaterEqualr@rn)r5rB_percentr9r9r:test_cpu_percents     zTestProcess.test_cpu_percentc Cs4tjddd}tjj|js&tWdQRXdS)Nzpsutil.cpu_count)Z return_value)r'rSr1r2rucalledAssertionError)r5mr9r9r:test_cpu_percent_numcpus_nones z)TestProcess.test_cpu_percent_numcpus_nonecCstjj}|jdks(|jdks(t||jdks:t||jdksLt|trb|j dksbt|x&|j D]}t j dt j t||qjWdS)Ngz%H:%M:%S)r1r2 cpu_timesusersystemr~ children_userchildren_systemrZiowait_fieldsrpstrftime localtimegetattr)r5timesrmr9r9r:test_cpu_timess  zTestProcess.test_cpu_timescCstjjdd\}}tjdd\}}t||gt||gdkrZ|jd||ft||gt||gdkr|jd||fdS)Ng?zexpected: %s, found: %s)r1r2rr>rmaxminrq)r5 user_timeZ kernel_timeutimeZktimer9r9r:test_cpu_times_2 s zTestProcess.test_cpu_times_2z not supportedcCsPtj}|j}|j|dtjdkr4|j|d|j|jttjdS)Nrr[)r1r2Zcpu_numry cpu_countr=assertInrv)r5rBnumr9r9r: test_cpu_nums    zTestProcess.test_cpu_numcCsZ|j}tj}|j}t||}|dkr@|jd|||ftjdtj|jdS)Nrz'expected: %s, found: %s, difference: %sz%Y %m %d %H:%M:%S)r;rp create_timeabsrqrr)r5rBnowr differencer9r9r:test_create_time s zTestProcess.test_create_timez POSIX onlycCs4tjj}|dk r0tjjtd}|j||dS)Ntty)r1r2terminalr>pathrealpathr+r=)r5rrr9r9r: test_terminal2s zTestProcess.test_terminal)Zonly_ifcCstj}|j}ttd}|jWdQRX|j}t rt r|j|j |j |j |j |j t r|j|j |j |j |j|jn |j|j|j|j|j|j|j}t|jd.}tr|jtdddn|jddWdQRX|j}|j|j |j |j|j|j|j|j |j |j|j|jt r`|j|j|j|j|j |j xJtt|D]:}tr|dkrqn|j||d|j||dqnWdS)Nrbwbxi@Basciirr)r1r2Z io_countersopenrreadrr assertGreater read_countr= write_countrZ read_charsZ write_charsry read_bytes write_bytes get_testfnr writebytesrvlen)r5rBZio1fZio2ir9r9r:test_io_counters9s>  zTestProcess.test_io_countersz linux onlyc.sfdd}tjts.|jjdtj|jtjd|jtjd|jtjd|jtjdj}|j ||jtj|jt jtjdf|j t jtjddWdQRXjtj|jt jtjdfjtjdd|jt jtjdf|j t jtjd dWdQRXyjtjddWntj k rhYnX|jt d jtjdWdQRX|jt d jtjdWdQRX|jt d jddWdQRXdS) Ncs&|\}}|tjkrd}j||dS)Nr)r1IOPRIO_CLASS_NONEionice)initioclassvalue)rBr9r:cleanupgs z.TestProcess.test_ionice_linux..cleanuprr[r)rzioclass accepts no valuez$'ioclass' argument must be specified)r1r2rr=rrZIOPRIO_CLASS_RTZIOPRIO_CLASS_BEZIOPRIO_CLASS_IDLE addCleanuptupler@rnrWassertRaisesRegex)r5rrr9)rBr:test_ionice_linuxds>       zTestProcess.test_ionice_linuxz!not supported on this win versioncCstj}ts|j|jtj|j}|j|j||jtj|j|jtj|jtj|j|jtjy|jtj Wntj k rYnX|j|jtj |j t d|jtjddWdQRX|j t d|jtj dWdQRXdS)Nz&value argument not accepted on Windowsr[)rzis not a valid priority)r1r2rr=rZ IOPRIO_NORMALrZIOPRIO_VERYLOWZ IOPRIO_LOWZ IOPRIO_HIGHrWr TypeErrorrn)r5rBrr9r9r:test_ionice_wins&   zTestProcess.test_ionice_wincCsddl}tjtj}ddttD}|s4t|x|D]}tt|}|j|d|t|kr|j |t||t rxq:|j |j ||j |q:|j |}|j t |d|j|dd|j|ddq:WdS)NrcSsg|]}|jdr|qS)ZRLIMIT) startswith).0rr9r9r: sz/TestProcess.test_rlimit_get..rr[rlrl)resourcer1r2r>r?dirr~rryr=rrlimitZ getrlimitr)r5rrBnamesrmrretr9r9r:test_rlimit_gets       zTestProcess.test_rlimit_getcCs|j}|jtjd|j|jtjdtrX|jtdtjj djdWdQRX|j t|jtjdWdQRXdS)Nr\zcan't use prlimitr)r\r\)r\r\)r\r\r\) r;rr1Z RLIMIT_NOFILEr=rrrnZ _psplatformr2r@)r5rBr9r9r:test_rlimit_sets zTestProcess.test_rlimit_setc Cstj}|j}|jtj\}}z|jtjd|ft|d}|jddWdQRX|jt*}t|d}|jddWdQRXWdQRX|j t r|j j n|j dt j Wd|jtj||f|j |jtj||fXdS)NirXir)r1r2rr RLIMIT_FSIZErrr@IOErrorr=r exceptionrUZEFBIG)r5rBtestfnsofthardrexcr9r9r: test_rlimits   " zTestProcess.test_rlimitcCstj}|jtj\}}zR|jtjd|f|jtjtj|ft|jd}|jddWdQRXWd|jtj||f|j|jtj||fXdS)Nirri) r1r2rr RLIM_INFINITYrrrr=)r5rBrrrr9r9r:test_rlimit_infinitysz TestProcess.test_rlimit_infinitycCs<tj}|jtj\}}|jtj||jtj||fdS)N)r1r2rrr=r)r5rBrrr9r9r:test_rlimit_infinity_valuesz&TestProcess.test_rlimit_infinity_valuecCsrtj}tr.g?)deltacSsg|] }|jqSr9)r)rrr9r9r:r>s) r;rrr1rWrrZassertAlmostEqualrrsumr)r5rBr9r9r:test_threads_2-s zTestProcess.test_threads_2c Cstj}|jdd\}}|j}|j|d|j|ddgd}|jdd\}}|j}|j|||j|||j||~tr|j} |j| j| j |j| j | j |j} x | j D]} |jt | | dqWdS)Nrri`)r1r2Z memory_infomemory_percentrryr r=ZrssZwsetvmsZpagefilerr) r5rBZrss1Zvms1Zpercent1ZmemarrZrss2Zvms2Zpercent2memrmr9r9r:test_memory_infoBs&       zTestProcess.test_memory_infocCstj}tjj}|j}xT|jD]J}t||}|j|d||fd|dkrPts"t rVq"|j |||||fdq"Wt s|t s|t r|j|j dt r|j|jd|j|jddS)Nr)msgr)r1r2Zvirtual_memorytotalZmemory_full_inforrryrrZassertLessEqualr russZpssZswap)r5rBrrrmrr9r9r:test_memory_full_infoas    z!TestProcess.test_memory_full_infoc Cstj}|j}|jt|tt||jdd}x|D]}|jjdsisabsr~r existsislinkrr rbasenamestatrS_ISREGst_moderrrwintr) r5rBmapsZext_mapsntrdatastfnamerr9r9r:test_memory_mapsqsD            zTestProcess.test_memory_mapsc sLtj}t4}ddfdd|jD}|j||WdQRXdS)NcSstjjtjj|S)N)r>rrnormcase)rBr9r9r:normpathsz8TestProcess.test_memory_maps_lists_lib..normpathcsg|]}|jqSr9)r)rr)rr9r:rsz:TestProcess.test_memory_maps_lists_lib..)r1r2r$rr)r5rBrZlibpathsr9)rr:test_memory_maps_lists_libs z&TestProcess.test_memory_maps_lists_libcCs>tj}|j|jt|jddts.ts.tr:|jdddS)Nz?!?)Zmemtyper)r1r2rr@rnrrr )r5rBr9r9r:test_memory_percents  zTestProcess.test_memory_percentcCsP|j}|jst|js t|j|j|j s>t|j sLtdS)N)r; is_runningr~rDrE)r5rBr9r9r:test_is_runnings  zTestProcess.test_is_runningcCs|j}|j}y|j|tWntk rtrbt|ttkrbtjj }|j|||tnNdt j dt j df}y |j|j |dtj |dWntk rYnXYnXt |ddg}|j|ddS)Nz%s.%srr[rQz-czimport os; print('hey')Zhey)r;exer=rr~r rr>rrsys version_inforeplacer+)r5rBrrveroutr9r9r:test_exes  zTestProcess.test_execCstddg}|j|}ts ts tr6|j|jdtnhtrtr|jd}|tkr|jdj |jdddj |dddS|jdj |jdj |dS)Nz-czimport time; time.sleep(60)r r[) rr;rrrr=cmdlinerrjoin)r5rrBpyexer9r9r: test_cmdlines    (zTestProcess.test_cmdlinezbroken on PYPYc Cs~tg}|jdgd|jddg|j|}trjy|j|j|Wqztjk rf|jdYqzXn|j|j|dS)Nz-v2z-czimport time; time.sleep(10)z#OPENBSD: process turned into zombie) rextendr;rr=rr1 ZombieProcessskipTest)r5rrBr9r9r:test_long_cmdlines zTestProcess.test_long_cmdlinecCsH|j}|jj}tjjtjjtjj}|j |sDt ||fdS)N) r;rmlowerr>rrrr executablerr~)r5rBrmrr9r9r: test_names zTestProcess.test_namezunreliable on PYPYc Cst|jdd}|ddg}|j|}try|j|jtjj|Wqt k r|j t j kr~tjj|j |jst nYqXn|j|jtjj|dS)N 0123456789r)suffixz-czimport time; time.sleep(10)Z01234567890123456789)r&rr;rr=rmr>rrr~statusr1 STATUS_ZOMBIEr)r5rrrBr9r9r:test_long_names   zTestProcess.test_long_namezbroken on SUNOSz broken on AIXcCspt|jdd}|ddg}|j|}|j|j||j|jtjj||jtjj |j tjj |dS)Nz foo bar ))rz-czimport time; time.sleep(10)) r&rr;r=rrmr>rrrr)r5rrrBr9r9r:test_prog_w_funky_names   z"TestProcess.test_prog_w_funky_namecCsXtj}|j\}}}|j|tj|j|tjttdrT|jtj|jdS)N getresuid) r1r2uidsr=r>getuidgeteuidhasattrr )r5rBreal effectivesavedr9r9r: test_uids(s  zTestProcess.test_uidscCsXtj}|j\}}}|j|tj|j|tjttdrT|jtj|jdS)Nr ) r1r2gidsr=r>getgidgetegidr$ getresgid)r5rBr%r&r'r9r9r: test_gids6s  zTestProcess.test_gidscsfdd}tj|jtjdj}|j||trd}xtjtjtj tj tj tj gD]}|j |dvyj|Wntjk rYnLXj}|tj tj tj fkr||ks|dkr|}|j||n |j||WdQRXq^Wnyttdr|jtjtjtjjjd|jjdttdr`|jtjtjtjjtsjd|jjdWntjk rYnXdS)Nc s*yj|Wntjk r$YnXdS)N)nicer1rW)r)rBr9r:rEsz&TestProcess.test_nice..cleanupstr)prio getpriorityr[r)r1r2r@rr.rr ZIDLE_PRIORITY_CLASSZBELOW_NORMAL_PRIORITY_CLASSZNORMAL_PRIORITY_CLASSZABOVE_NORMAL_PRIORITY_CLASSZHIGH_PRIORITY_CLASSZREALTIME_PRIORITY_CLASSsubTestrWr=r$r>r1 PRIO_PROCESSr?r)r5rrZ highest_prior0Znew_prior9)rBr: test_niceDsT        zTestProcess.test_nicecCstj}|j|jtjdS)N)r1r2r=rSTATUS_RUNNING)r5rBr9r9r: test_statusszTestProcess.test_statuscCs||j}|j}trh|jd\}}tj}|jdr>tjd|j ||dt j krx|j |t j dn|j |tjdS)N\$zrunning as service accountZ USERDOMAIN) r;usernamer splitgetpassZgetuserendswithrrr=r>environ)r5rBr9domainZ getpass_userr9r9r: test_usernames    zTestProcess.test_usernamecCs |j}|j|jtjdS)N)r;r=cwdr>getcwd)r5rBr9r9r:test_cwdszTestProcess.test_cwdcCs$tddg}|j|}t|jddS)Nz-cz/import os, time; os.chdir('..'); time.sleep(60)z#ret == os.path.dirname(os.getcwd()))rr;r#r@)r5r_rBr9r9r: test_cwd_2s  zTestProcess.test_cwd_2cCstj}|j}|st||j|j|ttdrL|j|ttj |j |jt |t t |tt t tjdd}xr|D]j}|j|g|j|j|gttdr|j|jttj |j t|dr|j|jd|jqW|jgtr|j|j|jjn|j|j|ttdrP|j|jttj |j |jt|jd|j||jt ||jt|dS)Nsched_getaffinityT)percpunum_cpurr[)r1r2 cpu_affinityr~rr$r>r=listrDr3rrrvrurFr_procZ_get_eligible_cpusr@rr)r5rBinitialZall_cpusnr9r9r:test_cpu_affinitys6         zTestProcess.test_cpu_affinitycCsp|j}ttjdddg}|jt|j||jt|jtdd|jt|jddg|jt|jdd gdS) NT)rE i'i*r1r[rl) r;rr1rr@rnrGrvr)r5rBZ invalid_cpur9r9r:test_cpu_affinity_errss z"TestProcess.test_cpu_affinity_errscCstj}|j}|st||j|j|t|dkrB|dd}g}x@tt|dD],}x&tj||D]}|rj|j t |qjWqXWx.|D]&}|j||j t |jt |qWdS)N r[) r1r2rGr~rrrv itertools combinationsappendrHr=sorted)r5rBrJZcombosrZsubsetcombor9r9r:"test_cpu_affinity_all_combinationss     z.TestProcess.test_cpu_affinity_all_combinationsz broken on BSDzunreliable on APPVEYORc Csdtj}|j}|j}|j||t|d|}|jdd|jt|jdt |}dd|D}|j t j j ||trx$|D]}|j |kr|j|jdqWWdQRXx"|D]}t j j|j st|qWd|}|jtd|g}xLtd D],}d d|jD}||krPtjd qW|j t j j ||x$|D]}t j j|s@t|q@WdS) Nrxizlen(ret) != %icSsg|]}tjj|jqSr9)r>rr)rrr9r9r:rsz/TestProcess.test_open_files..z2import time; f = open(r'%s', 'r'); time.sleep(60);z-crtcSsg|]}tjj|jqSr9)r>rr)rrr9r9r:rsg{Gz?)r1r2r open_files assertNotInrrflushr#rrr>rrrr=positionisfiler~r;rrvrpsleep) r5rBrfilesr filenamesfilerrr9r9r:test_open_filess4       zTestProcess.test_open_filesc Cstj}tjj}|j}t|d}xJ|jD](}||j||jksT|j |j kr.Pq.W|j dt |j|j ||j||jtr|j |j dn|j |j |j |jd}|j |d|j|j |d|j |j|j|jWdQRXdS)Nwzno file found; files=%sr[rrl)r1r2r>rrrrrXrmfdfilenorqreprr=r rY)r5rBrrfileobjr`Zntupler9r9r:test_open_files_2s$  zTestProcess.test_open_files_2cCstj}|j}|j}t|d}|j|j|j|j|dtj}|j|j|j|j|d|j|j|j|j|dS)Nrbr[r) r1r2rZnum_fdsrrcloser=socket)r5rBrstartr`sockr9r9r: test_num_fds1s   zTestProcess.test_num_fdsz not reliable on OPENBSD & NETBSDcCsVtj}t|j}x2tdD]&}tjdt|j}||krdSqW|jddS)Nrg?z2num ctx switches still the same after 2 iterations)r1r2rZnum_ctx_switchesrvrpr]rq)r5rBbeforerzafterr9r9r:test_num_ctx_switches@s   z!TestProcess.test_num_ctx_switchescCsFtj}ttdr&|j|jtj|j}|j|jtjdS)Ngetppid) r1r2r$r>r=ppidrpr;r?)r5rBr9r9r: test_ppidLs  zTestProcess.test_ppidcCsB|j}|j|jjtjtjd}|jtj |jdS)Nr) r;r=parentr3r>r?r1pidsZ assertIsNoner2)r5rBZ lowest_pidr9r9r: test_parentSs zTestProcess.test_parentcCs8tj}|j\}}|j|j||j|j|dS)N)r1r2rhr=rs)r5rsrirjr9r9r:test_parent_multiZs zTestProcess.test_parent_multicCs`tj}|jst|j\}}|j|jd||j|jd||j|jd|dS)Nrr[)r1r2parentsr~rhr=)r5rsrirjr9r9r: test_parents`s   zTestProcess.test_parentscCstj}|j|jg|j|jddg|jdd}|j}|jdd}xJ||fD]>}|jt|d|j|dj|j|j|dj|jqVWdS)NT) recursiver) creationflagsr[)r1r2r=childrenr;rr3rq)r5rsriZ children1Z children2r{r9r9r: test_childrenis  zTestProcess.test_childrencCsftj}|j\}}|j|j|g|j|jdd||g|j|j|j|jddgdS)NT)ry)r1r2rhr=r{rLrE)r5rsrirjr9r9r:test_children_recursivexs z#TestProcess.test_children_recursivec Cstjt}x@tjD]4}y||jd7<Wqtjk rFYqXqWt|jdddd d}t r~|dkr~|j dtj |}y|j dd}Wntj k rYnX|jt|tt|dS) Nr[cSs|dS)Nr[r9)rr9r9r:sz6TestProcess.test_children_duplicates..)keyrzPID 0T)ryrl) collections defaultdictrr1Z process_iterrqErrorrTitemsrrr2r{rWr=rr)r5tablerBr3cr9r9r:test_children_duplicatess     z$TestProcess.test_children_duplicatescCs|tj}|j\}}|jdd}|jt|d|j|d||j|d||j}|j|d||j|d|dS)NT)ryrrr[)r1r2rhr{r=rrw)r5rsrirjr{rwr9r9r:test_parents_and_childrens  z%TestProcess.test_parents_and_childrencCsZ|j}|jx*tdD]}|jtjkr.PtjdqW|j|j |jtjdS)Nrtg{Gz?) r;rervrr1STATUS_STOPPEDrpr]rfassertNotEqual)r5rBrzr9r9r:test_suspend_resumeszTestProcess.test_suspend_resumecCs$|jttjd|jttjddS)NrNr[rl)r@rr1r2rn)r5r9r9r:test_invalid_pidszTestProcess.test_invalid_pidc;Cstj}|jddgd}|jt|jddgtjttj}|jdgdd}t|dt sp|j|ddt j ddtj d "|j|jd gd dd d iWdQRXt j ddtj |jdd |jtj |jd gdWdQRXt j ddtj|jdd "|j|jd gddd diWdQRXt j ddtd F|j}|jd t |j|jt|jd gdWdQRXWdQRX|jt|jdWdQRX|jt|jdgWdQRX|jt|jdd gWdQRXdS) Nrrm)attrsZ connectionsfoo)rZad_valuezpsutil.Process.niceT)createrRr.r[Zbar)r1r2Zas_dictr=rTkeysrrt isinstancerHr'rSrWr4r3r@rNotImplementedErrorrYrrn)r5rBdr9r9r: test_as_dictsD" " "   zTestProcess.test_as_dictcCstj}tjd8}|j|j|jWdQRX|j|jdWdQRXtjd}|j|jWdQRX|j|jddS)Nz$psutil._psplatform.Process.cpu_timesr[r)r1r2r'rSoneshotrr= call_count)r5rBrr9r9r: test_oneshots   zTestProcess.test_oneshotc&Cstj}tjd}tjdj}|j:|j|j|j|j|jWdQRXWdQRX|j|jd|j|jdWdQRXWdQRXtjd}|j|jWdQRX|j|jddS)Nz$psutil._psplatform.Process.cpu_timesz(psutil._psplatform.Process.oneshot_enterr[r)r1r2r'rSrrr=r)r5rBm1m2rr9r9r:test_oneshot_twices    " zTestProcess.test_oneshot_twicecCs|j\}}|j}|j}|j|||j&|j|j||j|j|WdQRX|j&|j|j||j|j|WdQRXdS)N)rhrqrrr=)r5p1p2Zp1_ppidZp2_ppidr9r9r:test_oneshot_cache s    zTestProcess.test_oneshot_cachecstfdd}j}|j|jtr:ttjd|jj|t |}x"|j |j D]\}}|||qZWdS)Nc sy |}WnRtjk r"Yn^tjk r6YnJtjk r\trV|dkrVdSYn$Xtrn|dkrndSjd||fdS)Nrrrrmz+%r didn't raise NSP and returned %r instead)rr)rrm)r1rr4rWrr rq)funZfun_namer)r5r9r:assert_raises_nsp#s   zFTestProcess.test_halfway_terminated_process..assert_raises_nspz %s not in ret) r;rLrEr r#r1rtr3rIr(iterall)r5rrBnsrrmr9)r5r:test_halfway_terminated_processs  z+TestProcess.test_halfway_terminated_processcCs|j\}}|j|dS)N)Z spawn_zombieZassertProcessZombie)r5rszombier9r9r:test_zombie_processAs zTestProcess.test_zombie_processc CsBtj}tjdtjdd}|js*t|js4tWdQRXdS)Nzpsutil.Processr)rR)r1r2r'rSrrr~r})r5rBrr9r9r:$test_zombie_process_is_running_w_excFs  z0TestProcess.test_zombie_process_is_running_w_excc CsHtj}tjdtjdd"}|j|jtj|js:t WdQRXdS)Nz!psutil._psplatform.Process.statusr)rR) r1r2r'rSrr=rrr}r~)r5rBrr9r9r: test_zombie_process_status_w_excQsz,TestProcess.test_zombie_process_status_w_excc Cs|j}tj|j}|j|jdf|_|j s6t|tj|jksJtd}t|}xJ|j |j |j ddD]0\}}|j |d|j tj||WdQRXqnW|j tj||j|j tj||j|j tj||j|j tj||jdS)Nrtz4process no longer exists and its PID has been reusedF) clear_cache)rm)r0r1r2r3r_identrr~r(rsettersZkillersr2rr4rqrsrwr{)r5ZsubprBrrrrmr9r9r:test_reused_pid]s  zTestProcess.test_reused_pidc CsdtjkrH|jtjtjdtjd s.t|jtjdjddStjd}t r\tj nt }|j||j |j||j |j||j|j||j|j||j|j||jtjt|}x|j|j|jD]\}}y |}Wntj k rYqX|d kr|j|jdq|dkrBt r,dnd}|j|j|q|dkr|st|qWts|jdtjtjdstdS) Nrr[r!r)r9zNT AUTHORITY\SYSTEMrootrm)r!r))r1rtr@r4r2Z pid_existsr~r=rqr rWrnrErLrerfrDrNrFrGr(rZgettersrr%r9rr)r5rBrrrrmrrr9r9r: test_pid_0ns:     zTestProcess.test_pid_0cCsJdd}d|_tj}||j}|tjj}t rFtrF|j||dS)NcSsV|jdd|jddtr@|jdd|jdd|jddtdd|jDS)NPLATHOMEZ__CF_USER_TEXT_ENCODINGZVERSIONER_PYTHON_PREFER_32_BITZVERSIONER_PYTHON_VERSIONcSs8g|]0\}}|jddjdd|jddjddfqS) rQ )r )rkvr9r9r:rsz@TestProcess.test_environ..clean_dict..)poprdictr)rr9r9r: clean_dicts     z,TestProcess.test_environ..clean_dict) ZmaxDiffr1r2r=r>copyrrr=)r5rrBZd1Zd2r9r9r: test_environs  zTestProcess.test_environz #include char * const argv[] = {"cat", 0}; char * const envp[] = {"A=1", "X", "C=3", 0}; int main(void) { // Close stderr on exec so parent can wait for the // execve to finish. if (fcntl(2, F_SETFD, FD_CLOEXEC) != 0) return 0; return execve("/bin/cat", argv, envp); } )c_code)stdinrZrN3)ACr)textwrapdedentr%rr0r]r^r1r2r3r.rr~r=rZrrrr=rW communicate returncode)r5rJZcexer8rBenvr9r9r:test_weird_environs$    zTestProcess.test_weird_environN)k__name__ __module__ __qualname____doc__r;rCrKrMrPrskipIfr rXr`rrgrkrorrr|rrrrrrrrr-rrrrr rrrrrrrrrrrr*r,rrrrrrrrrr rrrrrr rrr(r-r4r6r?rBrCrrLrOrVrrrargrlrrorrrurvrxr|r}rrrrrrrrrrrrrrrrrrr9r9r9r:r/Ms         * ,   .     ? *  #      7 &  '  r/csneZdZdZeedr&ejZejZ fddZ fddZ fddZ d d Z ejd 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. r"csXtj||xDddt|DD].}t||fdd}t||tj||q"WdS)NcSsg|]}|jdr|qS)test)r)rrr9r9r:rsz0LimitedUserTestCase.__init__..c s&y Wntjk r YnXdS)N)r1rW)r5)methr9r:test_s z+LimitedUserTestCase.__init__..test_)r__init__rrsetattrtypes MethodType)r5r6r7attrr) __class__)rr:rs   zLimitedUserTestCase.__init__cs"tjtjdtjddS)Ni)rsetUpr>setegidseteuid)r5)rr9r:rs  zLimitedUserTestCase.setUpcs&tj|jtj|jtjdS)N)r>r PROCESS_UIDr PROCESS_GIDrtearDown)r5)rr9r:rs  zLimitedUserTestCase.tearDownc Cs8ytjjdWntjk r(Yn X|jddS)Nr[zexception not raisedrl)r1r2r.rWrq)r5r9r9r:r4s zLimitedUserTestCase.test_nicer[zcauses problem as rootcCsdS)Nr9)r5r9r9r:rsz'LimitedUserTestCase.test_zombie_process)rrrrr$r>r"rr*rrrrr4rrr __classcell__r9r9)rr:rs    rc@s4eZdZdZeddZddZddZdd Zd S) TestPopenzTests for psutil.Popen class.cCs tdS)N)r))clsr9r9r: tearDownClassszTestPopen.tearDownClassc Cstddg}tj|tjtjtdB}|j|j|j|j t ||j t t |d|jWdQRXtr|j|jdtj n|j|jdtjdS)Nz-czimport time; time.sleep(60);)stdoutrZrrr\)rr1Popenr]r^r rmrrZ assertTruerr@rArrLr r=rErFrG)r5r_procr9r9r: test_misc s  zTestPopen.test_miscc Cshtjtdgtjtjtjtd}|jWdQRX|jjs>t |j jsJt |j jsVt |j |j ddS)Nz-V)rrZrrr)r1rrr]r^r rrclosedr~rZrr=r)r5rr9r9r:test_ctx_manager6s   zTestPopen.test_ctx_managerc Cstddg}tj|tjtjtdv}|j|j|jtj |j|jtj |j |jtj |j t j tr|jtj |j t j|jtj |j t jWdQRXdS)Nz-czimport time; time.sleep(60);)rrZr)rr1rr]r^r rLrEr@r4rDrNrFrGr Z CTRL_C_EVENTZCTRL_BREAK_EVENT)r5r_rr9r9r:test_kill_terminateDs( zTestPopen.test_kill_terminateN) rrrr classmethodrrrrr9r9r9r:rs  r__main__) run_from_name)HrrrUr;rQr>rFrirr]rrrprrr1rrrrrrrr 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"rrrZpsutil.tests.runnerr__file__r9r9r9r:s                                             6H