a M_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 ZCeBdddddddddZDedgd ZEed!gd"ZFed#gd$ZGed%eGjHd&ZId'd(ZJd)d*ZKd+d,ZLd-d.ZMd/d0ZNd1d2ZOd3d4ZPd5d6ZQe jRZRe jSZSdOd8d9ZTd:d;ZUe jVZVe jWZWdPd=d>ZXd?d@ZYdAdBZZdCdDZ[dEdFZ\e j]Z]dGdHZ^dIdJZ_ej`dKdLZaGdMdNdNebZcdS)QzmacOS 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 scputimesusernicesystemidlesvmem)totalZ availablepercentusedfreeactiveinactivewiredpmem)r)r*r+r,pfullmem)ussc CsTt\}}}}}}||}||}||8}t|||dd}t||||||||S)z&System virtual memory as a namedtuple.rZround_)cextZ virtual_memrr5) r6r:r;r<r9Z speculativeZavailr8r7rB3/usr/lib64/python3.9/site-packages/psutil/_psosx.pyvirtual_memoryps rDcCs4t\}}}}}t||dd}t||||||S)z=Swap system memory as a (total, used, free, sin, sout) tuple.rr@)rAZswap_memrrZsswap)r6r8r9ZsinZsoutr7rBrBrC swap_memorysrEcCst\}}}}t||||S)z(Return system CPU times as a namedtuple.)rA cpu_timesr/r0rBrBrCrFsrFcCs:g}tD](}|\}}}}t||||}||q |S)z(Return system CPU times as a named tuple)rA per_cpu_timesr/append)retZcpu_tr1r2r3r4itemrBrBrCrGs    rGcCstS)z0Return the number of logical CPUs in the system.)rAcpu_count_logicalrBrBrBrCrKsrKcCstS)z1Return the number of physical CPUs in the system.)rAZcpu_count_physrBrBrBrCcpu_count_physicalsrLcCs"t\}}}}}t||||SN)rA cpu_statsrZ scpustats)Z ctx_switchesZ interruptsZsoft_interruptsZsyscallsZtrapsrBrBrCrNs  rNcCst\}}}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 )rAcpu_freqrZscpufreq)ZcurrZmin_Zmax_rBrBrCrOsrOFc Csvg}t}|D]`}|\}}}}|dkr,d}|sJtj|rtj|sJqd}} t|||||| } || q|S)z8Return mounted disk partitions as a list of namedtuples.ZnoneN) rAdisk_partitionsospathisabsexistsrZ sdiskpartrH) allretlistZ partitions partitionZdeviceZ mountpointZfstypeZoptsZmaxfileZmaxpathntuplerBrBrCrQs   rQcCsbzt\}}}Wnty&YdS0|dk}|rd|pDd||}||q|S)z:Return currently connected users as a list of namedtuples.~N)rAusersrZsuserrH) rWrawlistrJr1ZttyhostnameZtstamprdntrBrBrCrs"s rscCs`t}d|vr\ztd|ddWn.ty>YntyZ|ddYn0|SNr)rAr_r` create_timeinsertr r)ZlsrBrBrCr_6s   r_cCs8zt|td}|tjkWSty2YdS0dS)Nr%F)rAproc_kinfo_oneshotkinfo_proc_mapSZOMB Exception)rdstrBrBrC is_zombieIs   rcstfdd}|S)z`Decorator which translates bare OSError exceptions into NoSuchProcess and AccessDenied. csz|g|Ri|WStyVt|jrDt|j|j|jnt|j|jYnDtytt|j|jYn&t j yt|j|j|jYn0dSrM) rrrdr_name_ppidr rrrAZZombieProcessError)selfargskwargsfunrBrCwrapperUs   z wrap_exceptions..wrapper) functoolswraps)rrrBrrCwrap_exceptionsQs rc csz dVWnttfy}zvt|ts4|jtjkrz |}WntyV|Yq0|tjkrvt |j |j |j qt |j |j nWYd}~n d}~00dS)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)rk RuntimeError isinstancerlZESRCHr%r r STATUS_ZOMBIErrdrrr)procror%rBrBrC catch_zombiees     rc@sheZdZdZgdZddZeeddZeeddZ d d Z d d Z ed dZ eddZ eddZeddZeddZeddZeddZeddZeddZedd Zed!d"Zed#d$Zed%d&Zed'd(Zed)d*Zed+d,Zed=d.d/Zed0d1Zed>d3d4Zed5d6Zed7d8Z ed9d:Z!ed;d<Z"d2S)?r`z1Wrapper class around underlying C implementation.)rdrr_cachecCs||_d|_d|_dSrM)rdrr)rrdrBrBrC__init__szProcess.__init__cCs$t|j}t|ttks J|SrM)rArzrdlenr{rrIrBrBrC_get_kinfo_procs zProcess._get_kinfo_proccCsLt|t|j}Wdn1s*0Yt|ttksHJ|SrM)rrAZproc_pidtaskinfo_oneshotrdrpidtaskinfo_maprrBrBrC_get_pidtaskinfos *zProcess._get_pidtaskinfocCs|j||j|dSrM)rZcache_activaterrrBrBrC oneshot_enters zProcess.oneshot_entercCs|j||j|dSrM)rZcache_deactivaterrrBrBrC oneshot_exits zProcess.oneshot_exitcCs(|td}|dur|St|jS)Nr&)rr{rAZ proc_namerd)rr&rBrBrCr&sz Process.namecCs8t|t|jWdS1s*0YdSrM)rrAZproc_exerdrrBrBrCexes z Process.execCs8t|t|jWdS1s*0YdSrM)rrAZ proc_cmdlinerdrrBrBrCcmdlines zProcess.cmdlinecCs<t| tt|jWdS1s.0YdSrM)rrrAZ proc_environrdrrBrBrCenvirons zProcess.environcCs|td|_|jS)Nr)rr{rrrBrBrCrsz Process.ppidcCs8t|t|jWdS1s*0YdSrM)rrAZproc_cwdrdrrBrBrCcwds z Process.cwdcCs.|}t|td|td|tdS)NrrrrrZpuidsr{rZrawtuplerBrBrCuidss    z Process.uidscCs.|}t|td|td|tdS)Nr r!r"rrrBrBrCgidss    z Process.gidscCs<|td}t}z ||WSty6YdS0dS)Nr#)rr{rZget_terminal_mapKeyError)rZtty_nrZtmaprBrBrCterminals   zProcess.terminalcCs6|}t|td|td|td|tdS)Nr)r*r+r,)rr=rrrBrBrC memory_infos    zProcess.memory_infocCs"|}t|j}t||fSrM)rrAZproc_memory_ussrdr>)rZ basic_memr?rBrBrCmemory_full_infos zProcess.memory_full_infocCs(|}t|td|tdddS)Nr'r(g)rrZ pcputimesrrrBrBrCrFs   zProcess.cpu_timescCs|tdS)Nr$)rr{rrBrBrCrxszProcess.create_timecCs|td}t|dS)Nr.r)rrrZpctxsw)rZvolrBrBrCnum_ctx_switchesszProcess.num_ctx_switchescCs|tdS)Nr-)rrrrBrBrC num_threadsszProcess.num_threadscCsv|jdkrgSg}t|t|j}Wdn1s<0Y|D]&\}}t|rJt||}||qJ|Srw)rdrrAZproc_open_filesr rZ popenfilerH)rfilesrtrSfdrYrBrBrC open_filess  *   zProcess.open_filesr^c Cs|tvr(td|dddtDft|\}}t| t|j||}Wdn1sb0Yg}|D]2}|\}}} } } } t||| | | | t} | | qt|S)Nz+invalid %r kind argument; choose between %sz, cSsg|] }t|qSrB)repr).0xrBrBrC z'Process.connections..) r ValueErrorjoinrrAZproc_connectionsrdr TCP_STATUSESrH)rrcZfamiliestypesrtrIrJrZfamtypeZladdrZraddrr%rvrBrBrCras  . zProcess.connectionscCsF|jdkrdSt|t|jWdS1s80YdSrw)rdrrAZ proc_num_fdsrrBrBrCnum_fdss  zProcess.num_fdsNcCst|j||jSrM)rZwait_pidrdr)rtimeoutrBrBrCwait&sz Process.waitcCs8t|t|jWdS1s*0YdSrM)rrj getpriorityrdrrBrBrCnice_get*s zProcess.nice_getcCs:t|t|j|WdS1s,0YdSrM)rrj setpriorityrd)rvaluerBrBrCnice_set/s zProcess.nice_setcCs|td}t|dS)Nr%?)rr{ PROC_STATUSESget)rcoderBrBrCr%4szProcess.statuscCs<t|j}g}|D]"\}}}t|||}||q|SrM)rAZ proc_threadsrdrZpthreadrH)rrtrWZ thread_idutimeZstimerYrBrBrCthreads:s   zProcess.threads)r^)N)#__name__ __module__ __qualname____doc__ __slots__rrr rrrrr&rrrrrrrrrrrFrxrrrrarrrrr%rrBrBrBrCr`sr                        r`)F)r^)dr contextlibrlrrR collectionsrrPrrrrArrjrr 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_STOPPEDr|rrdictr{rr/r5r=_fieldsr>rDrErFrGrKrLrNrO disk_usageZdisk_io_countersrQr\rhZ net_if_addrsrfrprqrsr_Z pid_existsrrcontextmanagerrobjectr`rBrBrBrCs