U =_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.rZround_)cextZ virtual_memrr4) r5r9r:r;r8Z speculativeZavailr7r6rA@/opt/alt/python38/lib64/python3.8/site-packages/psutil/_psosx.pyvirtual_memoryps rCcCs4t\}}}}}t||dd}t||||||S)z=Swap system memory as a (total, used, free, sin, sout) tuple.rr?)r@Zswap_memrrZsswap)r5r7r8ZsinZsoutr6rArArB swap_memorysrDcCst\}}}}t||||S)z(Return system CPU times as a namedtuple.)r@ cpu_timesr/)r0r1r2r3rArArBrEsrEcCs:g}tD](}|\}}}}t||||}||q |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||||SN)r@ cpu_statsrZ scpustats)Z ctx_switchesZ interruptsZsoft_interruptsZsyscallsZtrapsrArArBrMs rMcCst\}}}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_rArArBrNsrNFc Csvg}t}|D]`}|\}}}}|dkr,d}|sJtj|rtj|sJqd}} t|||||| } || q|S)z8Return mounted disk partitions as a list of namedtuples.ZnoneN) r@disk_partitionsospathisabsexistsrZ sdiskpartrG) allretlistZ partitions partitionZdeviceZ mountpointZfstypeZoptsZmaxfileZmaxpathntuplerArArBrPs    rPcCsdzt\}}}Wntk r(YdSX|dk}|r>tj}n|dkrNtj}n|d}t|||S)zReturn battery information.Nr<)r@sensors_batteryNotImplementedErrorrZPOWER_TIME_UNLIMITEDZPOWER_TIME_UNKNOWNZsbattery)r6ZminsleftZ power_pluggedZsecsleftrArArBr[sr[inetc Cslg}tD]\}zt||}Wntk r8Yq Yq X|r |D]"}t||g}|tj|qBq |S)z System-wide network connections.)pidsProcess connectionsr listrGrZsconn)kindrHpidZconscrArArBnet_connectionss  rec Cst}i}|D]}z&t|}t|}t|\}}Wn0tk rl}z|jtjkr\W5d}~XYqXt t drt |}t ||||||<q|S)z)Get NIC stats (isup, duplex, speed, mtu).N NicDuplex) net_io_counterskeys cext_posixZ net_if_mtuZnet_if_is_runningZnet_if_duplex_speedOSErrorerrnoZENODEVhasattrrrfZ snicstats)namesrHr&ZmtuZisupZduplexZspeederrrArArB net_if_statss      rocCstS)z:The system boot time expressed in seconds since the epoch.)r@ boot_timerArArArBrpsrpc Cs\g}t}|D]F}|\}}}}}|dkr,q|s2qt||p>d|pDd||}||q|S)z:Return currently connected users as a list of namedtuples.~N)r@usersrZsuserrG) rVrawlistrIr0ZttyZhostnameZtstamprcntrArArBrr"s rrcCsdt}d|kr`ztd|ddWn2tk r@Yn tk r^|ddYnX|SNr)r@r^r_ create_timeinsertr r)ZlsrArArBr^6s r^cCs:zt|td}|tjkWStk r4YdSXdS)Nr%F)r@proc_kinfo_oneshotkinfo_proc_mapSZOMB Exception)rcstrArArB is_zombieIs  r}cstfdd}|S)z`Decorator which translates bare OSError exceptions into NoSuchProcess and AccessDenied. csz|f||WStk rRt|jr@t|j|j|jnt|j|jYnHtk rrt|j|jYn(t j k rt|j|j|jYnXdSrL) rr}rcr_name_ppidr rrr@ZZombieProcessError)selfargskwargsfunrArBwrapperUs z wrap_exceptions..wrapper) functoolswraps)rrrArrBwrap_exceptionsQs rc csz dVWnttfk r}zpt|ts6|jtjkrz |}Wntk rZ|YqX|tjkrzt |j |j |j qt |j |j nW5d}~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)rj RuntimeError isinstancerkZESRCHr%r r STATUS_ZOMBIErrcr~rr)procrnr%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.rcr~r_cachecCs||_d|_d|_dSrL)rcr~r)rrcrArArB__init__szProcess.__init__cCst|j}|SrL)r@rxrcrrHrArArB_get_kinfo_procs zProcess._get_kinfo_procc Cs$t|t|j}W5QRX|SrL)rr@Zproc_pidtaskinfo_oneshotrcrrArArB_get_pidtaskinfos zProcess._get_pidtaskinfocCs|j||j|dSrL)rZcache_activaterrrArArB oneshot_enters zProcess.oneshot_entercCs|j||j|dSrL)rZcache_deactivaterrrArArB oneshot_exits zProcess.oneshot_exitcCs(|td}|dk r|St|jS)Nr&)rryr@Z proc_namerc)rr&rArArBr&sz Process.namec Cs,t|t|jW5QRSQRXdSrL)rr@Zproc_exercrrArArBexes z Process.exec Cs,t|t|jW5QRSQRXdSrL)rr@Z proc_cmdlinercrrArArBcmdlines zProcess.cmdlinec Cs0t|tt|jW5QRSQRXdSrL)rrr@Z proc_environrcrrArArBenvirons zProcess.environcCs|td|_|jS)Nr)rryrrrArArBrsz Process.ppidc Cs,t|t|jW5QRSQRXdSrL)rr@Zproc_cwdrcrrArArBcwds z Process.cwdcCs.|}t|td|td|tdS)NrrrrrZpuidsryrZrawtuplerArArBuidss    z Process.uidscCs.|}t|td|td|tdS)Nr r!r"rrrArArBgidss    z Process.gidscCs>|td}t}z ||WStk r8YdSXdS)Nr#)rryrZget_terminal_mapKeyError)rZtty_nrZtmaprArArBterminals  zProcess.terminalcCs6|}t|td|td|td|tdS)Nr)r*r+r,)rr<pidtaskinfo_maprrArArB memory_infos    zProcess.memory_infocCs"|}t|j}t||fSrL)rr@Zproc_memory_ussrcr=)rZ basic_memr>rArArBmemory_full_infos zProcess.memory_full_infocCs(|}t|td|tdddS)Nr'r(g)rrZ pcputimesrrrArArBrEs  zProcess.cpu_timescCs|tdS)Nr$)rryrrArArBrvszProcess.create_timecCs|td}t|dS)Nr.r)rrrZpctxsw)rZvolrArArBnum_ctx_switchesszProcess.num_ctx_switchescCs|tdS)Nr-)rrrrArArB num_threadsszProcess.num_threadsc Csb|jdkrgSg}t|t|j}W5QRX|D]&\}}t|r6t||}||q6|Sru)rcrr@Zproc_open_filesr rZ popenfilerG)rfilesrsrRfdrXrArArB open_filess     zProcess.open_filesr]c Cs|tkr(td|dddtDft|\}}t|t|j||}W5QRXg}|D]2}|\}}} } } } t||| | | | t} | | q`|S)Nz+invalid %r kind argument; choose between %sz, cSsg|] }t|qSrA)repr).0xrArArB sz'Process.connections..) r ValueErrorjoinrr@Zproc_connectionsrcr TCP_STATUSESrG)rrbZfamiliestypesrsrHrIrZfamtypeZladdrZraddrr%rtrArArBr`s   zProcess.connectionsc Cs:|jdkrdSt|t|jW5QRSQRXdSru)rcrr@Z proc_num_fdsrrArArBnum_fdss  zProcess.num_fdsNcCst|j||jSrL)rZwait_pidrcr~)rZtimeoutrArArBwait&sz Process.waitc Cs,t|t|jW5QRSQRXdSrL)rri getpriorityrcrrArArBnice_get*s zProcess.nice_getc Cs.t|t|j|W5QRSQRXdSrL)rri setpriorityrc)rvaluerArArBnice_set/s zProcess.nice_setcCs|td}t|dS)Nr%?)rry PROC_STATUSESget)rcoderArArBr%4szProcess.statuscCs<t|j}g}|D]"\}}}t|||}||q|SrL)r@Z proc_threadsrcrZpthreadrG)rrsrVZ thread_idutimeZstimerXrArArBthreads:s   zProcess.threads)r])N)#__name__ __module__ __qualname____doc__ __slots__rrr rrrrr&rrrrrrrrrrrErvrrrr`rrrrr%rrArArArBr_sr                         r_)F)r])dr contextlibrkrrQ collectionsrrOrrrr@rrirr 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_STOPPEDrzrrdictryrr/r4r<_fieldsr=rCrDrErFrJrKrMrNZ disk_usageZdisk_io_countersrPr[rgZ net_if_addrsrerorprrr^Z pid_existsr}rcontextmanagerrobjectr_rArArArBs