3 ̪eQ?@sdZddlZddlZddlZddlmZddlmZddlmZddlm Z ddlm Z dd lm Z dd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZgZe jZe jZe jeje jej e j!ej"e j#ej$e j%ej&e j'ej(e j)ej*e j+ej,e j-ej.e j/ej0e j1ej2e j3ej4i Z5e j6ej7e j8ej9e j:ej;e jej?iZ@eAdddddddddddd ZBeAdddddddddZCedd d!d"d#gZDed$d%d&d'd(d)d*d+d,gZEed-d.d/d0d1gZFed2eFjGdZZHd4d5ZId6d7ZJd8d9ZKd:d;ZLdd?ZNd@dAZOdBdCZPejQZQe jRZRd[dEdFZSdGdHZTe jUZUe jVZVd\dJdKZWdLdMZXdNdOZYdPdQZZdRdSZ[ej\Z\dTdUZ]dVdWZ^GdXdYdYZ_dS)]zmacOS platform implementation.N) namedtuple)_common)_psposix) _psutil_osx) _psutil_posix) AccessDenied) NoSuchProcess) ZombieProcess) conn_tmap)conn_to_ntuple) isfile_strict)memoize_when_activated)parse_environ_block) usage_percent)PermissionError)ProcessLookupError ) ppidruideuidsuidrgidegidsgidttynrctimestatusname)cpuutimecpustimerssvmspfaultspageins numthreadsvolctxsw scputimesusernicesystemidlesvmemtotalZ availablepercentusedfreeactiveinactivewiredpmemr)r*r+r,pfullmemussc CsTtj\}}}}}}||}||}||8}t|||dd}t||||||||S)z&System virtual memory as a namedtuple.r)round_)cextZ virtual_memrr4) r5r9r:r;r8Z speculativeZavailr7r6rA9/usr/local/lib64/python3.6/site-packages/psutil/_psosx.pyvirtual_memoryqs rCcCs4tj\}}}}}t||dd}tj||||||S)z=Swap system memory as a (total, used, free, sin, sout) tuple.r)r?)r@Zswap_memrrsswap)r5r7r8sinsoutr6rArArB swap_memorysrGcCstj\}}}}t||||S)z(Return system CPU times as a namedtuple.)r@ cpu_timesr/)r0r1r2r3rArArBrHsrHcCs>g}x4tjD](}|\}}}}t||||}|j|qW|S)z)Return system CPU times as a named tuple.)r@ per_cpu_timesr/append)retZcpu_tr0r1r2r3itemrArArBrIs  rIcCstjS)z0Return the number of logical CPUs in the system.)r@cpu_count_logicalrArArArBrMsrMcCstjS)z-Return the number of CPU cores in the system.)r@cpu_count_coresrArArArBrNsrNcCs"tj\}}}}}tj||||S)N)r@ cpu_statsr scpustats) ctx_switches interruptssoft_interruptssyscallsZtrapsrArArBrOsrOcCstj\}}}tj|||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_freqrscpufreq)currZmin_Zmax_rArArBrUsrUFc Cs~g}tj}xl|D]d}|\}}}}|dkr.d}|sPtjj| stjj| rPqd}} tj|||||| } |j| qW|S)z8Return mounted disk partitions as a list of namedtuples.noneN) r@disk_partitionsospathisabsexistsr sdiskpartrJ) allretlist partitions partitiondevice mountpointfstypeoptsmaxfilemaxpathntuplerArArBrZs  rZc Csbytj\}}}Wntk r&dSX|dk}|rt|j|j|jnt|j|jYn"tk rpt|j|jYnXdS)N) rrr{r _name_ppidr rr)selfargskwargs)funrArBwrapper]s z wrap_exceptions..wrapper) functoolswraps)rrrA)rrBwrap_exceptionsXs 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)Brvz1Wrapper class around underlying C implementation.r{rr_cachecCs||_d|_d|_dS)N)r{rr)rr{rArArB__init__qszProcess.__init__cCs$tj|j}t|ttks t|S)N)r@rr{lenrAssertionError)rrKrArArB_get_kinfo_procvs zProcess._get_kinfo_proccCs$tj|j}t|ttks t|S)N)r@Zproc_pidtaskinfo_oneshotr{rpidtaskinfo_mapr)rrKrArArB_get_pidtaskinfo~s zProcess._get_pidtaskinfocCs|jj||jj|dS)N)rcache_activater)rrArArB oneshot_enters zProcess.oneshot_entercCs|jj||jj|dS)N)rcache_deactivater)rrArArB oneshot_exits zProcess.oneshot_exitcCs(|jtd}|dk r|Stj|jS)Nr&)rrr@Z proc_namer{)rr&rArArBr&sz Process.namecCs tj|jS)N)r@Zproc_exer{)rrArArBexesz Process.execCs tj|jS)N)r@Z proc_cmdliner{)rrArArBcmdlineszProcess.cmdlinecCsttj|jS)N)rr@Z proc_environr{)rrArArBenvironszProcess.environcCs|jtd|_|jS)Nr)rrr)rrArArBrsz Process.ppidcCs tj|jS)N)r@Zproc_cwdr{)rrArArBcwdsz Process.cwdcCs.|j}tj|td|td|tdS)Nrrr)rrpuidsr)rrawtuplerArArBuidss   z Process.uidscCs.|j}tj|td|td|tdS)Nr r!r")rrrr)rrrArArBgidss   z Process.gidsc Cs:|jtd}tj}y||Stk r4dSXdS)Nr#)rrrZget_terminal_mapKeyError)rZtty_nrZtmaprArArBterminals zProcess.terminalcCs6|j}t|td|td|td|tdS)Nr)r*r+r,)rr<r)rrrArArB memory_infos    zProcess.memory_infocCs"|j}tj|j}t||fS)N)rr@Zproc_memory_ussr{r=)rZ basic_memr>rArArBmemory_full_infos zProcess.memory_full_infocCs(|j}tj|td|tdddS)Nr'r(g)rr pcputimesr)rrrArArBrHs   zProcess.cpu_timescCs|jtdS)Nr$)rr)rrArArBrszProcess.create_timecCs|jtd}tj|dS)Nr.r)rrrpctxsw)rZvolrArArBnum_ctx_switchesszProcess.num_ctx_switchescCs|jtdS)Nr-)rr)rrArArB num_threadsszProcess.num_threadscCsR|jdkrgSg}tj|j}x.|D]&\}}t|r$tj||}|j|q$W|S)Nr)r{r@Zproc_open_filesr r popenfilerJ)rfilesrr\fdrjrArArB open_filess   zProcess.open_filesrtc Cs|tkr(td|djddtDft|\}}tj|j||}g}x:|D]2}|\}}} } } } t||| | | | t} |j| qNW|S)Nz+invalid %r kind argument; choose between %sz, cSsg|] }t|qSrA)repr).0xrArArB sz'Process.connections..) r ValueErrorrr@Zproc_connectionsr{r TCP_STATUSESrJ)rrzfamiliestypesrrKrLrfamtypeladdrraddrr%rrArArBrws  zProcess.connectionscCs|jdkrdStj|jS)Nr)r{r@Z proc_num_fds)rrArArBnum_fds s zProcess.num_fdsNcCstj|j||jS)N)rZwait_pidr{r)rtimeoutrArArBwaitsz Process.waitcCs tj|jS)N)r getpriorityr{)rrArArBnice_getszProcess.nice_getcCstj|j|S)N)r setpriorityr{)rvaluerArArBnice_setszProcess.nice_setcCs|jtd}tj|dS)Nr%?)rr PROC_STATUSESget)rcoderArArBr%szProcess.statuscCs@tj|j}g}x*|D]"\}}}tj|||}|j|qW|S)N)r@Z proc_threadsr{rpthreadrJ)rrraZ thread_idutimeZstimerjrArArBthreads$s  zProcess.threads)rt)N)#__name__ __module__ __qualname____doc__ __slots__rrrrrrrr&rrrrrrrrrrrHrrrrrwrrrrr%rrArArArBrvlsD                  rv)r>)F)rt)`rrrr[ collectionsrrYrrrr@rrrr r r r r rrr_compatrrZ__extra__all__Z getpagesizeZPAGESIZEZAF_LINKZTCPS_ESTABLISHEDCONN_ESTABLISHEDZ TCPS_SYN_SENT CONN_SYN_SENTZTCPS_SYN_RECEIVED CONN_SYN_RECVZTCPS_FIN_WAIT_1CONN_FIN_WAIT1ZTCPS_FIN_WAIT_2CONN_FIN_WAIT2ZTCPS_TIME_WAITCONN_TIME_WAITZ TCPS_CLOSED CONN_CLOSEZTCPS_CLOSE_WAITCONN_CLOSE_WAITZ TCPS_LAST_ACK CONN_LAST_ACKZ TCPS_LISTEN CONN_LISTENZ TCPS_CLOSING CONN_CLOSINGZPSUTIL_CONN_NONE CONN_NONErZSIDL STATUS_IDLEZSRUNSTATUS_RUNNINGZSSLEEPSTATUS_SLEEPINGZSSTOPSTATUS_STOPPEDr STATUS_ZOMBIErdictrrr/r4r<_fieldsr=rCrGrHrIrMrNrOrU disk_usageZdisk_io_countersrZrmrZ net_if_addrsr}rrrruZ pid_existsrrrvrArArArBs