JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr 0iw dZddlZddlZddlZddlZddlmZddlmZddlm Z ddl m Z ddl m Z dd l m Zdd l mZdd l mZdd l mZdd l mZddl mZddl mZddl mZddl mZddl mZddl mZddl mZddl mZgZerej8e j:ej<e j>ej@e jBejDe jFejHe jJejLe jNejPe jRiZ*n'erej8e j:ej@e jBejDe jFejVe jJejHe jJej<e jXejZe j>iZ*nerej8e j:ej@e jBejDe jFejHe jJej<e jXejZe j>iZ*ej\e j^ej`e jbejde jfejhe jjejle jnejpe jrejte jvejxe jzej|e j~eje jeje jeje ji ZFejZHejZIeJedZKeLdqidddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFZMedGgdHZNedIgdJZOedKgdLZPePZQedMgdNZRedOdPZSedQdRZTer edSgdTZUn edSgdUZUdVZVdWZWdXZXdYZYdZZZeserd[Z[nd\Z[d]Z\erd^Z]nerd_Z]drd`Z^e jZ_ejZ`ejZaejZbdaZcdbZderdcZeddZfdeZger egZhdgZkdhZlediZmdjZnerdkZonerdlZon e jZodmZpejdnZrGdodpZsy#ei$rZjedfejdZhYdZj[j`dZj[jwwxYw)sz5FreeBSD, OpenBSD and NetBSD platforms implementation.N) defaultdict) namedtuple) ElementTree)_common)_psposix) _psutil_bsd)FREEBSD)NETBSD)OPENBSD) AccessDenied) NoSuchProcess) ZombieProcess) conn_tmap)conn_to_ntuple)debug)memoize)memoize_when_activated) usage_percentproc_num_threadsppidstatusreal_uid effective_uid saved_uidreal_gid effective_gid saved_gidttynr create_time ctx_switches_vol ctx_switches_unvol read_io_count write_io_count user_timesys_time ch_user_time ch_sys_timerssvmsmemtextmemdatamemstackcpunumnamesvmem) total availablepercentusedfreeactiveinactivebufferscachedsharedwired scputimesusernicesystemidleirqpmem)r9r;textdatastack pcputimes)rUrW children_userchildren_system pmmap_grouped*path rss, private, ref_count, shadow_count pmmap_ext6addr, perms path rss, private, ref_count, shadow_countsdiskio) read_count write_count read_bytes write_bytes read_time write_time busy_time)rfrgrhric tj}tr|\}}}}}}tdd5}|D]d}|j dr t |j ddz} 4|j dsFt |j ddz} f ddd||z} || z } n|\}}}}}}} } ||z|z} ||z|z} t|| z |d} t|| | | ||| | | S#1swYUxYw)Nz /proc/meminforbsBuffers:ris MemShared:round_) cext virtual_memr open startswithintsplitrrG)memrHrLrMrNrRrPflinerOrQrKavailrJs >/opt/hc_python/lib64/python3.12/site-packages/psutil/_psbsd.pyvirtual_memoryr|s    C 7:4tVXuf/4 (A??;/!$**,q/2T9G__]3 a1D8F )~ HKEtVXufgv 6!D(~&UU]U1=G        5) (sAC/9!C//C8ctj\}}}}}t||d}tj||||||S)z@System swap memory as (total, used, free, sin, sout) namedtuple.rro)rqswap_memrrsswap)rHrKrLsinsoutrJs r{ swap_memoryrs?#'==? E4sDD%2G ==dGS$ ??cTtj\}}}}}t|||||S)z,Return system per-CPU times as a namedtuple.)rq cpu_timesrSrTs r{rrs,$(NN$4!D$c T4s 33rcg}tjD]*}|\}}}}}t|||||}|j|,|S)z(Return system CPU times as a namedtuple.)rq per_cpu_timesrSappend)retcpu_trUrVrWrXrYitems r{rrsO C##%(-%dFD#tVT37 4& Jrc*tjS)z0Return the number of logical CPUs in the system.)rqcpu_count_logicalrr{rrs  ! ! ##rc$tdk(rdSdS)Nr)rrrr{cpu_count_coresrs%'1,q6$6rcDd}tj}|b|jd}|dk7rL|d|dz}tj|} t |j dxsd}|j|stdk(ry|S#|jwxYw)z-Return the number of CPU cores in the system.Nz r(zgroup/children/group/cpur) rq cpu_topologyrfindr fromstringlenfindallclearr)rsindexroots r{rrs     =GGK(E{k N"--a0!dll+EFGO4CJJL "a' JJLs B Bctrtj\}}}}}ntrhtj\}}}}}}}t dd5}|D]0}|j dst |jd}2 dddn"trtj\}}}}}}}tjS#1swY!xYw)z*Return various CPU stats as a named tuple.z /proc/statrnsintrrN) r rq cpu_statsr rsrtrurvr r scpustats) ctxswintrs soft_intrssyscalls_traps_faults_forksrxrys r{rr s6:^^5E2uj(F  NN  Duj(FGV, %??7+ Q0E& %  NN  Duj(FGV   UE:x @@& %sC (C  Ccg}t}t|D]} tj|\}}|r` t |j ddj dd} t |j ddj dd}|jtj||S#t$rYwxYw#ttf$rd}Y|wxYw#ttf$rd}YcwxYw)zReturn frequency metrics for CPUs. As of Dec 2018 only CPU 0 appears to be supported by FreeBSD and all other cores match the frequency of CPU 0.  r/rN) rrangerqcpu_freqNotImplementedErrorrurv IndexError ValueErrorrrscpufreq)rnum_cpuscpucurrentavailable_freqmin_freqmax_freqs r{rrBs $&?C *.--*<'$">#7#7##7#7# # '  sAA;; BBc*tjS)z:The system boot time expressed in seconds since the epoch.)rq boot_timerrr{rrs >> rzignoring exception on import: ctdk(r|Sttz }|dk(st|dkr|Std|dkr||z S||zS)z!Account for system clock updates.rrz9system clock was updated; adjusting process create_time())INIT_BOOT_TIMErabsr)ctimediffs r{adjust_proc_create_timersU Q L + 19D A L IJ !84< t|rcg}tj}|D]>}|\}}}}}|dk(rtj||xsd|||}|j |@|S)z:Return currently connected users as a list of namedtuples.~N)rqusersrsuserr) rrrrUttyhostnametstamprrs r{rrscGjjlG+/(c8VS #:  ]]4h Dr  Nrcj tdjy#t$rYyt$rYywxYw)NrTF)ProcessrErr rrr{ _pid_0_existsr  s9    s 222cztj}tr d|vrtr|j dd|S)z7Returns a list of PIDs currently running on the system.r)rqpidsr r insert)rs r{rrs/ ))+CASLmo 1a JrcJtj|}|s |tvSy)NTr pid_existsrrexistss r{rr#s&$$S)$&= rcJtj|}|sy|tvS)NFrrs r{rr.s&$$S) $&= rcBtjfd}|S)z`Decorator which translates bare OSError exceptions into NoSuchProcess and AccessDenied. c|j|j|j}}} |g|i|S#t$r5}t j |rt ||||t|||d}~wt$r}t|||d}~wtj$r}t ||||d}~wt$r&}|dk(rdtvr t||||dd}~wwxYw)Nr) r_ppid_nameProcessLookupErrorrqproc_is_zombierrPermissionErrorr ZombieProcessErrorrr)selfargskwargsrrrErfuns r{wrapperz wrap_exceptions..wrapperAs((DJJ 4T t-d-f- -! 4""3'#Ct4#=T* 3 3sD)s 2&& :T40c 9 axAK"3-364  s8 3 C0A,, C8 BCB)) C5!CC) functoolswraps)r"r#s` r{wrap_exceptionsr&<s' __S  " Nrc#2K|j|j|j}}} dy#ttf$r?}t j |jrt||||t|||d}~wt$r}t|||d}~wwxYww)z8Same as above, for routines relying on reading /proc fs.N) rrrrFileNotFoundErrorrqrrrrr )instrrErrs r{wrap_exceptions_procfsr*Vshh DJJtC /  1 24   txx (T40c 9T* 3 /3%3./s0%B-BB:A66 B BBBcDeZdZdZgdZdZdZeedZ dZ dZ edZ ed Z ed Zed Zed Zed ZedZedZedZeredZedZeZed(dZedZedZedZed)dZed*dZedZedZ edZ!edZ"edZ#e$dd Z%e$dd!Z&ed"Z'ed#Z(er"ed$Z)ed%Z*ed&Z+ed*d'Z,yy)+r z1Wrapper class around underlying C implementation.)_cacherrrc.||_d|_d|_yN)rrr)rrs r{__init__zProcess.__init__ms  rcBtj|jy)z+Raise NSP if the process disappeared on us.N)rq proc_namerrs r{ _assert_alivezProcess._assert_alivers txx rc~tj|j}t|ttk(sJ|S)z;Retrieves multiple process info in one shot as a raw tuple.)rqproc_oneshot_inforrkinfo_proc_maprrs r{oneshotzProcess.oneshotxs4$$TXX.3x3~.... rc:|jj|yr.)r8cache_activater2s r{ oneshot_enterzProcess.oneshot_enters ##D)rc:|jj|yr.)r8cache_deactivater2s r{ oneshot_exitzProcess.oneshot_exits %%d+rc||jtd}||Stj|jS)NrE)r8r6rqr1r)rrEs r{rEz Process.names4||~nV45'tET^^DHH-EErc~tr/|jdk(rytj|jStrH|jdk(ryt |5t jd|jdcdddSddl}|j}|r|j|dxsdSy#1swYyxYw)Nrz/proc/z/exe) r rrqproc_exer r*osreadlinkshutilcmdlinewhich)rrErFs r{exez Process.exes xx1}==* * xx1}'-{{VDHH:T#:;.- llnG||GAJ/525.-s #B33B<c,tr|jdk(rgStr tj|jStj|jS#t $r}|j t jk(r|j|j|j}}}tj|jrt||||t|jst||||td|dgcYd}~Sd}~wwxYw)Nrz ignoring z and returning an empty list)r rr rq proc_cmdlinerrEINVALrrrrrrr)rrrrErs r{rFzProcess.cmdlines txx1}I   ((22$$TXX. . 99 ,&*hh DJJtC**4884+Ct<#E%dhh/+Ct<#EIcW,HIJI s$A D&B!DD DDc@tj|jSr.)rq proc_environrr2s r{environzProcess.environs  **rc|jtd}tj} ||S#t$rYywxYw)Nr%)r8r6rget_terminal_mapKeyError)rtty_nrtmaps r{terminalzProcess.terminalsFw 78((* <   s5 AAcX|jtd|_|jS)Nr)r8r6rr2s r{rz Process.ppids#\\^N6$:; zzrc|j}tj|td|td|tdS)Nrrr)r8rpuidsr6rrawtuples r{uidsz Process.uidsE<<>}} ^J/ 0 ^O4 5 ^K0 1  rc|j}tj|td|td|tdS)Nrr!r#)r8rpgidsr6rXs r{gidsz Process.gidsr[rc|j}tj|td|td|td|tdS)Nr1r3r5r7)r8rr^r6rXs r{rzProcess.cpu_timessT<<>  ^K0 1 ^J/ 0 ^N3 4 ^M2 3   rc6|jtdS)NrC)r8r6r2s r{cpu_numzProcess.cpu_nums<<>.":; ;rc |j}t|td|td|td|td|tdS)Nr9r;r=r?rA)r8rZr6rXs r{ memory_infozProcess.memory_infos[<<> ^E* + ^E* + ^I. / ^I. / ^J/ 0   rc`|jtd}tr |s t|}|S)Nr')r8r6r r)r monotonicrs r{r'zProcess.create_times+ ~m<= )+E2E rc~trtj|jSt |j Sr.)HAS_PROC_NUM_THREADSrqrrrthreadsr2s r{ num_threadszProcess.num_threads s+ ((2 2t||~& &rcv|j}tj|td|tdS)Nr)r+)r8rpctxswr6rXs r{num_ctx_switcheszProcess.num_ctx_switchess:<<>~~ ^$67 8 ^$89 :  rctj|j}g}|D].\}}}tj|||}|j |0t r|j|Sr.)rq proc_threadsrrpthreadrr r3)rrr thread_idutimestimers r{rhzProcess.threadssb##DHH-'. #Iue__Yu=F NN6 "(/     rc t|\}}g}tr!tj|j|}nIt r"tj|j||}n!tj |j||}|D]C}|dd\}}} } } } tr ||vs| |vrt||| | | | t} |j| E|j|S)Nr") rr rqrrr proc_net_connectionsr rrrr3)rrrrrrrrrrrrrrs r{rzProcess.net_connections%s#D/% **488T:G **488XuEG//(EJGD26r( /BT5%x'T->CueV\B JJrN  rNcXtj|j||jSr.)rwait_pidrr)rtimeouts r{waitz Process.wait>s  7DJJ??rc@tj|jSr.)rqproc_priority_getrr2s r{nice_getzProcess.nice_getBs%%dhh//rcBtj|j|Sr.)rqproc_priority_setr)rvalues r{nice_setzProcess.nice_setFs%%dhh66rcb|jtd}tj|dS)Nr?)r8r6 PROC_STATUSESget)rcodes r{rzProcess.statusJs*||~nX67  s++rcz|j}tj|td|tdddS)Nr-r/r)r8rpior6rXs r{ io_counterszProcess.io_countersPs?<<>{{ ^O4 5 ^$45 6     rcltr|jdk(rytj|jS)z)Return process current working directory.rrA)r rrqproc_cwdr2s r{cwdz Process.cwdZs' txx1}}}TXX&&rmmaprbrdctj|j}|Dcgc]\}}tj||c}}Scc}}w)z8Return files opened by process as a list of namedtuples.)rqproc_open_filesrr popenfile)rrpathrs r{ open_fileszProcess.open_filesjsA&&txx0>v;!#":'%S/)# d**488XtTJJrF)inetr.)-__name__ __module__ __qualname____doc__ __slots__r/r3r&rr8r;r>rErHrFrNrTrrZr^rr rarcmemory_full_infor'rirlrhrrxr{rrrrrnt_mmap_grouped nt_mmap_extrrrrrrrrr{r r hs;3I !  *,FF2//4++        <  <  #''    0@@0077,,   ''!<OHKEE   8  8    4  3  3  K  KMrr rr)tr contextlibrr$rC collectionsrr xml.etreerrArrr rqr r r r rrrrrrrr__extra__all__SIDL STATUS_IDLESRUNSTATUS_RUNNINGSSLEEPSTATUS_SLEEPINGSSTOPSTATUS_STOPPEDSZOMB STATUS_ZOMBIESWAITSTATUS_WAITINGSLOCK STATUS_LOCKEDrSDEAD STATUS_WAKINGSONPROCTCPS_ESTABLISHEDCONN_ESTABLISHED TCPS_SYN_SENT CONN_SYN_SENTTCPS_SYN_RECEIVED CONN_SYN_RECVTCPS_FIN_WAIT_1CONN_FIN_WAIT1TCPS_FIN_WAIT_2CONN_FIN_WAIT2TCPS_TIME_WAITCONN_TIME_WAIT TCPS_CLOSED CONN_CLOSETCPS_CLOSE_WAITCONN_CLOSE_WAIT TCPS_LAST_ACK CONN_LAST_ACK TCPS_LISTEN CONN_LISTEN TCPS_CLOSING CONN_CLOSINGPSUTIL_CONN_NONE CONN_NONEr getpagesizePAGESIZEAF_LINKrrgdictr6rGrSrZpfullmemr^rarcrer|rrrrrrrr disk_usagedisk_io_countersr net_if_addrsrrrrrr Exceptionrrrr rrr&contextmanagerr*r rrr{rs <  #"!!!""#+"  7&& 7)) W,, G** G)) G** G))M  7&& W,, G** G)) G)) 7(( g,,'M*  7&& W,, G** G)) 7(( g,, M 733--G11'00'00//g(('11--g))w++7,,   4    ,,t%78         !"#$%& '( )* +, -./0 12 3H  L M : < &AB  {M O AC  I K  %23G %BCG,^@4 $  f7 6A@ 0 2  ((&&  02 B 0  "  $    !$$J4 //"CKCKG  .sg67sS""S>' S99S>