B =_VD@sdZddlZddlZddlZddlZddlmZddlmZddlm Z ddlm Z ddlm Z dd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZgZe Ze jZe jeje j ej!e j"ej#e j$ej%e j&ej'e j(ej)e j*ej+e j,ej-e j.ej/e j0ej1e j2ej3e j4ej5i Z6e j7ej8e j9ej:e j;eje j?ej@iZAeBdddddddddddd ZCeBdddddddddZDedd d!d"d#gZEed$d%d&d'd(d)d*d+d,gZFed-d.d/d0d1gZGed2eGjHd3ZId4d5ZJd6d7ZKd8d9ZLd:d;ZMdd?ZOd@dAZPdBdCZQe jRZRe jSZSd\dEdFZTdGdHZUe jVZVe jWZWd]dJdKZXdLdMZYdNdOZZdPdQZ[dRdSZ\e j]Z]dTdUZ^dVdWZ_ej`dXdYZaGdZd[d[ebZcdS)^zmacOS platform implementation.N) namedtuple)_common)_psposix) _psutil_osx) _psutil_posix) AccessDenied) conn_tmap)conn_to_ntuple) isfile_strict)memoize_when_activated) NoSuchProcess)parse_environ_block) usage_percent) ZombieProcess)PermissionError)ProcessLookupError ) ppidruideuidsuidrgidegidsgidttynrctimestatusname)cpuutimecpustimerssvmspfaultspageins numthreadsvolctxsw scputimesusernicesystemidlesvmemtotalZ availablepercentusedfreeactiveinactivewiredpmemr)r*r+r,pfullmem)ussc CsTt\}}}}}}||}||}||8}t|||dd}t||||||||S)z&System virtual memory as a namedtuple.r)round_)cextZ virtual_memrr4) r5r9r:r;r8Z speculativeZavailr7r6rA@/opt/alt/python37/lib64/python3.7/site-packages/psutil/_psosx.pyvirtual_memoryps rCcCs4t\}}}}}t||dd}t||||||S)z=Swap system memory as a (total, used, free, sin, sout) tuple.r)r?)r@Zswap_memrrZsswap)r5r7r8ZsinZsoutr6rArArB swap_memorysrDcCst\}}}}t||||S)z(Return system CPU times as a namedtuple.)r@ cpu_timesr/)r0r1r2r3rArArBrEsrEcCs>g}x4tD](}|\}}}}t||||}||qW|S)z(Return system CPU times as a named tuple)r@ per_cpu_timesr/append)retZcpu_tr0r1r2r3itemrArArBrFs  rFcCstS)z0Return the number of logical CPUs in the system.)r@cpu_count_logicalrArArArBrJsrJcCstS)z1Return the number of physical CPUs in the system.)r@Zcpu_count_physrArArArBcpu_count_physicalsrKcCs"t\}}}}}t||||S)N)r@ cpu_statsrZ scpustats)Z ctx_switchesZ interruptsZsoft_interruptsZsyscallsZtrapsrArArBrLsrLcCst\}}}t|||gS)zReturn CPU frequency. On macOS per-cpu frequency is not supported. Also, the returned frequency never changes, see: https://arstechnica.com/civis/viewtopic.php?f=19&t=465002 )r@cpu_freqrZscpufreq)ZcurrZmin_Zmax_rArArBrMsrMFc Cszg}t}xh|D]`}|\}}}}|dkr.d}|sLtj|rtj|sLqd}} t|||||| } || qW|S)z8Return mounted disk partitions as a list of namedtuples.ZnoneN) r@disk_partitionsospathisabsexistsrZ sdiskpartrG) allretlistZ partitions partitionZdeviceZ mountpointZfstypeZoptsZmaxfileZmaxpathntuplerArArBrOs   rOcCsbyt\}}}Wntk r&dSX|dk}|rt|j|j|jnt|j|jYnHtk rpt|j|jYn(t j k rt|j|j|jYnXdS)N) rr{rbr_name_ppidr rrr@ZZombieProcessError)selfargskwargs)funrArBwrapperUs z wrap_exceptions..wrapper) functoolswraps)rrrA)rrBwrap_exceptionsQs rc csy dVWnttfk r}zpt|ts6|jtjkry |}Wntk rZ|YqX|tjkrzt |j |j |j qt |j |j nWdd}~XYnXdS)zThere are some poor C APIs which incorrectly raise ESRCH when the process is still alive or it's a zombie, or even RuntimeError (those who don't set errno). This is here in order to solve: https://github.com/giampaolo/psutil/issues/1044 N)ri RuntimeError isinstancerjZESRCHr%r r STATUS_ZOMBIErrbr|r}r)procrmr%rArArB catch_zombiees    rc@sleZdZdZddddgZddZeedd Zeed d Z d d Z ddZ eddZ eddZ eddZeddZeddZeddZeddZeddZed d!Zed"d#Zed$d%Zed&d'Zed(d)Zed*d+Zed,d-Zed.d/Zed@d1d2Zed3d4ZedAd6d7Zed8d9Zed:d;Z edd?Z"d5S)Br^z1Wrapper class around underlying C implementation.rbr|r}_cachecCs||_d|_d|_dS)N)rbr|r})r~rbrArArB__init__szProcess.__init__cCs$t|j}t|ttks t|S)N)r@rvrblenrwAssertionError)r~rHrArArB_get_kinfo_procs zProcess._get_kinfo_procc Cs8t|t|j}WdQRXt|ttks4t|S)N)rr@Zproc_pidtaskinfo_oneshotrbrpidtaskinfo_mapr)r~rHrArArB_get_pidtaskinfos zProcess._get_pidtaskinfocCs|j||j|dS)N)rZcache_activater)r~rArArB oneshot_enters zProcess.oneshot_entercCs|j||j|dS)N)rZcache_deactivater)r~rArArB oneshot_exits zProcess.oneshot_exitcCs(|td}|dk r|St|jS)Nr&)rrwr@Z proc_namerb)r~r&rArArBr&sz Process.namec Cs t|t|jSQRXdS)N)rr@Zproc_exerb)r~rArArBexes z Process.exec Cs t|t|jSQRXdS)N)rr@Z proc_cmdlinerb)r~rArArBcmdlines zProcess.cmdlinec Cs$t|tt|jSQRXdS)N)rrr@Z proc_environrb)r~rArArBenvirons zProcess.environcCs|td|_|jS)Nr)rrwr})r~rArArBrsz Process.ppidc Cs t|t|jSQRXdS)N)rr@Zproc_cwdrb)r~rArArBcwds z Process.cwdcCs.|}t|td|td|tdS)Nrrr)rrpuidsrw)r~rawtuplerArArBuidss   z Process.uidscCs.|}t|td|td|tdS)Nr r!r")rrrrw)r~rrArArBgidss   z Process.gidscCs:|td}t}y||Stk r4dSXdS)Nr#)rrwrZget_terminal_mapKeyError)r~Ztty_nrZtmaprArArBterminals zProcess.terminalcCs6|}t|td|td|td|tdS)Nr)r*r+r,)rr<r)r~rrArArB memory_infos    zProcess.memory_infocCs"|}t|j}t||fS)N)rr@Zproc_memory_ussrbr=)r~Z basic_memr>rArArBmemory_full_infos zProcess.memory_full_infocCs(|}t|td|tdddS)Nr'r(g)rrZ pcputimesr)r~rrArArBrEs   zProcess.cpu_timescCs|tdS)Nr$)rrw)r~rArArBrtszProcess.create_timecCs|td}t|dS)Nr.r)rrrZpctxsw)r~ZvolrArArBnum_ctx_switchesszProcess.num_ctx_switchescCs|tdS)Nr-)rr)r~rArArB num_threadsszProcess.num_threadsc Csf|jdkrgSg}t|t|j}WdQRXx.|D]&\}}t|r8t||}||q8W|S)Nr)rbrr@Zproc_open_filesr rZ popenfilerG)r~filesrrrQfdrWrArArB open_filess   zProcess.open_filesr\c Cs|tkr(td|dddtDft|\}}t|t|j||}WdQRXg}x:|D]2}|\}}} } } } t||| | | | t} | | qbW|S)Nz+invalid %r kind argument; choose between %sz, cSsg|] }t|qSrA)repr).0xrArArB sz'Process.connections..) r ValueErrorjoinrr@Zproc_connectionsrbr TCP_STATUSESrG)r~raZfamiliestypesrrrHrIrZfamtypeZladdrZraddrr%rsrArArBr_s   zProcess.connectionsc Cs.|jdkrdSt|t|jSQRXdS)Nr)rbrr@Z proc_num_fds)r~rArArBnum_fdss  zProcess.num_fdsNcCst|j||jS)N)rZwait_pidrbr|)r~ZtimeoutrArArBwait&sz Process.waitc Cs t|t|jSQRXdS)N)rrh getpriorityrb)r~rArArBnice_get*s zProcess.nice_getc Cs"t|t|j|SQRXdS)N)rrh setpriorityrb)r~valuerArArBnice_set/s zProcess.nice_setcCs|td}t|dS)Nr%?)rrw PROC_STATUSESget)r~coderArArBr%4szProcess.statuscCs@t|j}g}x*|D]"\}}}t|||}||qW|S)N)r@Z proc_threadsrbrZpthreadrG)r~rrrUZ thread_idutimeZstimerWrArArBthreads:s  zProcess.threads)r\)N)#__name__ __module__ __qualname____doc__ __slots__rrr rrrrr&rrrrrrrrrrrErtrrrr_rrrrr%rrArArArBr^sD                    r^)F)r\)dr contextlibrjrrP collectionsrrNrrrr@rrhrr r r r r rrrZ_compatrrZ__extra__all__Z getpagesizeZPAGESIZEZAF_LINKZTCPS_ESTABLISHEDZCONN_ESTABLISHEDZ TCPS_SYN_SENTZ CONN_SYN_SENTZTCPS_SYN_RECEIVEDZ CONN_SYN_RECVZTCPS_FIN_WAIT_1ZCONN_FIN_WAIT1ZTCPS_FIN_WAIT_2ZCONN_FIN_WAIT2ZTCPS_TIME_WAITZCONN_TIME_WAITZ TCPS_CLOSEDZ CONN_CLOSEZTCPS_CLOSE_WAITZCONN_CLOSE_WAITZ TCPS_LAST_ACKZ CONN_LAST_ACKZ TCPS_LISTENZ CONN_LISTENZ TCPS_CLOSINGZ CONN_CLOSINGZPSUTIL_CONN_NONEZ CONN_NONErZSIDLZ STATUS_IDLEZSRUNZSTATUS_RUNNINGZSSLEEPZSTATUS_SLEEPINGZSSTOPZSTATUS_STOPPEDrxrrdictrwrr/r4r<_fieldsr=rCrDrErFrJrKrLrMZ disk_usageZdisk_io_countersrOrZrfZ net_if_addrsrdrnrorqr]Z pid_existsr{rcontextmanagerrobjectr^rArArArBs