PNG  IHDRQgAMA a cHRMz&u0`:pQ<bKGDgmIDATxwUﹻ& ^CX(J I@ "% (** BX +*i"]j(IH{~R)[~>h{}gy)I$Ij .I$I$ʊy@}x.: $I$Ii}VZPC)I$IF ^0ʐJ$I$Q^}{"r=OzI$gRZeC.IOvH eKX $IMpxsk.쒷/&r[޳<v| .I~)@$updYRa$I |M.e JaֶpSYR6j>h%IRز if&uJ)M$I vLi=H;7UJ,],X$I1AҒJ$ XY XzI@GNҥRT)E@;]K*Mw;#5_wOn~\ DC&$(A5 RRFkvIR}l!RytRl;~^ǷJj اy뷦BZJr&ӥ8Pjw~vnv X^(I;4R=P[3]J,]ȏ~:3?[ a&e)`e*P[4]T=Cq6R[ ~ޤrXR Հg(t_HZ-Hg M$ãmL5R uk*`%C-E6/%[t X.{8P9Z.vkXŐKjgKZHg(aK9ڦmKjѺm_ \#$5,)-  61eJ,5m| r'= &ڡd%-]J on Xm|{ RҞe $eڧY XYrԮ-a7RK6h>n$5AVڴi*ֆK)mѦtmr1p| q:흺,)Oi*ֺK)ܬ֦K-5r3>0ԔHjJئEZj,%re~/z%jVMڸmrt)3]J,T K֦OvԒgii*bKiNO~%PW0=dii2tJ9Jݕ{7"I P9JKTbu,%r"6RKU}Ij2HKZXJ,妝 XYrP ެ24c%i^IK|.H,%rb:XRl1X4Pe/`x&P8Pj28Mzsx2r\zRPz4J}yP[g=L) .Q[6RjWgp FIH*-`IMRaK9TXcq*I y[jE>cw%gLRԕiFCj-ďa`#e~I j,%r,)?[gp FI˨mnWX#>mʔ XA DZf9,nKҲzIZXJ,L#kiPz4JZF,I,`61%2s $,VOϚ2/UFJfy7K> X+6 STXIeJILzMfKm LRaK9%|4p9LwJI!`NsiazĔ)%- XMq>pk$-$Q2x#N ؎-QR}ᶦHZډ)J,l#i@yn3LN`;nڔ XuX5pF)m|^0(>BHF9(cզEerJI rg7 4I@z0\JIi䵙RR0s;$s6eJ,`n 䂦0a)S)A 1eJ,堌#635RIgpNHuTH_SԕqVe ` &S)>p;S$魁eKIuX`I4춒o}`m$1":PI<[v9^\pTJjriRŭ P{#{R2,`)e-`mgj~1ϣLKam7&U\j/3mJ,`F;M'䱀 .KR#)yhTq;pcK9(q!w?uRR,n.yw*UXj#\]ɱ(qv2=RqfB#iJmmL<]Y͙#$5 uTU7ӦXR+q,`I}qL'`6Kͷ6r,]0S$- [RKR3oiRE|nӦXR.(i:LDLTJjY%o:)6rxzҒqTJjh㞦I.$YR.ʼnGZ\ֿf:%55 I˼!6dKxm4E"mG_ s? .e*?LRfK9%q#uh$)i3ULRfK9yxm܌bj84$i1U^@Wbm4uJ,ҪA>_Ij?1v32[gLRD96oTaR׿N7%L2 NT,`)7&ƝL*꽙yp_$M2#AS,`)7$rkTA29_Iye"|/0t)$n XT2`YJ;6Jx".e<`$) PI$5V4]29SRI>~=@j]lp2`K9Jaai^" Ԋ29ORI%:XV5]JmN9]H;1UC39NI%Xe78t)a;Oi Ҙ>Xt"~G>_mn:%|~ޅ_+]$o)@ǀ{hgN;IK6G&rp)T2i୦KJuv*T=TOSV>(~D>dm,I*Ɛ:R#ۙNI%D>G.n$o;+#RR!.eU˽TRI28t)1LWϚ>IJa3oFbu&:tJ*(F7y0ZR ^p'Ii L24x| XRI%ۄ>S1]Jy[zL$adB7.eh4%%누>WETf+3IR:I3Xה)3אOۦSRO'ٺ)S}"qOr[B7ϙ.edG)^ETR"RtRݜh0}LFVӦDB^k_JDj\=LS(Iv─aTeZ%eUAM-0;~˃@i|l @S4y72>sX-vA}ϛBI!ݎߨWl*)3{'Y|iSlEڻ(5KtSI$Uv02,~ԩ~x;P4ցCrO%tyn425:KMlD ^4JRxSهF_}شJTS6uj+ﷸk$eZO%G*^V2u3EMj3k%)okI]dT)URKDS 7~m@TJR~荪fT"֛L \sM -0T KfJz+nإKr L&j()[E&I ߴ>e FW_kJR|!O:5/2跌3T-'|zX ryp0JS ~^F>-2< `*%ZFP)bSn"L :)+pʷf(pO3TMW$~>@~ū:TAIsV1}S2<%ޟM?@iT ,Eūoz%i~g|`wS(]oȤ8)$ ntu`өe`6yPl IzMI{ʣzʨ )IZ2= ld:5+請M$-ї;U>_gsY$ÁN5WzWfIZ)-yuXIfp~S*IZdt;t>KūKR|$#LcԀ+2\;kJ`]YǔM1B)UbG"IRߊ<xܾӔJ0Z='Y嵤 Leveg)$znV-º^3Ւof#0Tfk^Zs[*I꯳3{)ˬW4Ւ4 OdpbZRS|*I 55#"&-IvT&/윚Ye:i$ 9{LkuRe[I~_\ؠ%>GL$iY8 9ܕ"S`kS.IlC;Ҏ4x&>u_0JLr<J2(^$5L s=MgV ~,Iju> 7r2)^=G$1:3G< `J3~&IR% 6Tx/rIj3O< ʔ&#f_yXJiގNSz; Tx(i8%#4 ~AS+IjerIUrIj362v885+IjAhK__5X%nV%Iͳ-y|7XV2v4fzo_68"S/I-qbf; LkF)KSM$ Ms>K WNV}^`-큧32ŒVؙGdu,^^m%6~Nn&͓3ŒVZMsRpfEW%IwdǀLm[7W&bIRL@Q|)* i ImsIMmKmyV`i$G+R 0tV'!V)֏28vU7͒vHꦼtxꗞT ;S}7Mf+fIRHNZUkUx5SAJㄌ9MqμAIRi|j5)o*^'<$TwI1hEU^c_j?Е$%d`z cyf,XO IJnTgA UXRD }{H}^S,P5V2\Xx`pZ|Yk:$e ~ @nWL.j+ϝYb퇪bZ BVu)u/IJ_ 1[p.p60bC >|X91P:N\!5qUB}5a5ja `ubcVxYt1N0Zzl4]7­gKj]?4ϻ *[bg$)+À*x쳀ogO$~,5 زUS9 lq3+5mgw@np1sso Ӻ=|N6 /g(Wv7U;zωM=wk,0uTg_`_P`uz?2yI!b`kĸSo+Qx%!\οe|އԁKS-s6pu_(ֿ$i++T8=eY; צP+phxWQv*|p1. ά. XRkIQYP,drZ | B%wP|S5`~́@i޾ E;Չaw{o'Q?%iL{u D?N1BD!owPHReFZ* k_-~{E9b-~P`fE{AܶBJAFO wx6Rox5 K5=WwehS8 (JClJ~ p+Fi;ŗo+:bD#g(C"wA^ r.F8L;dzdIHUX݆ϞXg )IFqem%I4dj&ppT{'{HOx( Rk6^C٫O.)3:s(۳(Z?~ٻ89zmT"PLtw䥈5&b<8GZ-Y&K?e8,`I6e(֍xb83 `rzXj)F=l($Ij 2*(F?h(/9ik:I`m#p3MgLaKjc/U#n5S# m(^)=y=đx8ŬI[U]~SцA4p$-F i(R,7Cx;X=cI>{Km\ o(Tv2vx2qiiDJN,Ҏ!1f 5quBj1!8 rDFd(!WQl,gSkL1Bxg''՞^ǘ;pQ P(c_ IRujg(Wz bs#P­rz> k c&nB=q+ؔXn#r5)co*Ũ+G?7< |PQӣ'G`uOd>%Mctz# Ԫڞ&7CaQ~N'-P.W`Oedp03C!IZcIAMPUۀ5J<\u~+{9(FbbyAeBhOSܳ1 bÈT#ŠyDžs,`5}DC-`̞%r&ڙa87QWWp6e7 Rϫ/oY ꇅ Nܶըtc!LA T7V4Jsū I-0Pxz7QNF_iZgúWkG83 0eWr9 X]㾮݁#Jˢ C}0=3ݱtBi]_ &{{[/o[~ \q鯜00٩|cD3=4B_b RYb$óBRsf&lLX#M*C_L܄:gx)WΘsGSbuL rF$9';\4Ɍq'n[%p.Q`u hNb`eCQyQ|l_C>Lb꟟3hSb #xNxSs^ 88|Mz)}:](vbۢamŖ࿥ 0)Q7@0=?^k(*J}3ibkFn HjB׻NO z x}7p 0tfDX.lwgȔhԾŲ }6g E |LkLZteu+=q\Iv0쮑)QٵpH8/2?Σo>Jvppho~f>%bMM}\//":PTc(v9v!gոQ )UfVG+! 35{=x\2+ki,y$~A1iC6#)vC5^>+gǵ@1Hy٪7u;p psϰu/S <aʸGu'tD1ԝI<pg|6j'p:tպhX{o(7v],*}6a_ wXRk,O]Lܳ~Vo45rp"N5k;m{rZbΦ${#)`(Ŵg,;j%6j.pyYT?}-kBDc3qA`NWQū20/^AZW%NQ MI.X#P#,^Ebc&?XR tAV|Y.1!؅⨉ccww>ivl(JT~ u`ٵDm q)+Ri x/x8cyFO!/*!/&,7<.N,YDŽ&ܑQF1Bz)FPʛ?5d 6`kQձ λc؎%582Y&nD_$Je4>a?! ͨ|ȎWZSsv8 j(I&yj Jb5m?HWp=g}G3#|I,5v珿] H~R3@B[☉9Ox~oMy=J;xUVoj bUsl_35t-(ՃɼRB7U!qc+x4H_Qo֮$[GO<4`&č\GOc[.[*Af%mG/ ňM/r W/Nw~B1U3J?P&Y )`ѓZ1p]^l“W#)lWZilUQu`-m|xĐ,_ƪ|9i:_{*(3Gѧ}UoD+>m_?VPۅ15&}2|/pIOʵ> GZ9cmíتmnz)yߐbD >e}:) r|@R5qVSA10C%E_'^8cR7O;6[eKePGϦX7jb}OTGO^jn*媓7nGMC t,k31Rb (vyܴʭ!iTh8~ZYZp(qsRL ?b}cŨʊGO^!rPJO15MJ[c&~Z`"ѓޔH1C&^|Ш|rʼ,AwĴ?b5)tLU)F| &g٣O]oqSUjy(x<Ϳ3 .FSkoYg2 \_#wj{u'rQ>o;%n|F*O_L"e9umDds?.fuuQbIWz |4\0 sb;OvxOSs; G%T4gFRurj(֍ڑb uԖKDu1MK{1^ q; C=6\8FR艇!%\YÔU| 88m)֓NcLve C6z;o&X x59:q61Z(T7>C?gcļxѐ Z oo-08jہ x,`' ҔOcRlf~`jj".Nv+sM_]Zk g( UOPyεx%pUh2(@il0ݽQXxppx-NS( WO+轾 nFߢ3M<;z)FBZjciu/QoF 7R¥ ZFLF~#ȣߨ^<쩡ݛкvџ))ME>ώx4m#!-m!L;vv#~Y[đKmx9.[,UFS CVkZ +ߟrY٧IZd/ioi$%͝ب_ֶX3ܫhNU ZZgk=]=bbJS[wjU()*I =ώ:}-蹞lUj:1}MWm=̛ _ ¾,8{__m{_PVK^n3esw5ӫh#$-q=A̟> ,^I}P^J$qY~Q[ Xq9{#&T.^GVj__RKpn,b=`żY@^՝;z{paVKkQXj/)y TIc&F;FBG7wg ZZDG!x r_tƢ!}i/V=M/#nB8 XxЫ ^@CR<{䤭YCN)eKOSƟa $&g[i3.C6xrOc8TI;o hH6P&L{@q6[ Gzp^71j(l`J}]e6X☉#͕ ׈$AB1Vjh㭦IRsqFBjwQ_7Xk>y"N=MB0 ,C #o6MRc0|$)ف"1!ixY<B9mx `,tA>)5ػQ?jQ?cn>YZe Tisvh# GMމȇp:ԴVuږ8ɼH]C.5C!UV;F`mbBk LTMvPʍϤj?ԯ/Qr1NB`9s"s TYsz &9S%U԰> {<ؿSMxB|H\3@!U| k']$U+> |HHMLޢ?V9iD!-@x TIî%6Z*9X@HMW#?nN ,oe6?tQwڱ.]-y':mW0#!J82qFjH -`ѓ&M0u Uγmxϵ^-_\])@0Rt.8/?ٰCY]x}=sD3ojަЫNuS%U}ԤwHH>ڗjܷ_3gN q7[q2la*ArǓԖ+p8/RGM ]jacd(JhWko6ڎbj]i5Bj3+3!\j1UZLsLTv8HHmup<>gKMJj0@H%,W΃7R) ">c, xixј^ aܖ>H[i.UIHc U1=yW\=S*GR~)AF=`&2h`DzT󑓶J+?W+}C%P:|0H܆}-<;OC[~o.$~i}~HQ TvXΈr=b}$vizL4:ȰT|4~*!oXQR6Lk+#t/g lԁߖ[Jڶ_N$k*". xsxX7jRVbAAʯKҎU3)zSNN _'s?f)6X!%ssAkʱ>qƷb hg %n ~p1REGMHH=BJiy[<5 ǁJҖgKR*倳e~HUy)Ag,K)`Vw6bRR:qL#\rclK/$sh*$ 6덤 KԖc 3Z9=Ɣ=o>X Ώ"1 )a`SJJ6k(<c e{%kϊP+SL'TcMJWRm ŏ"w)qc ef꒵i?b7b('"2r%~HUS1\<(`1Wx9=8HY9m:X18bgD1u ~|H;K-Uep,, C1 RV.MR5άh,tWO8WC$ XRVsQS]3GJ|12 [vM :k#~tH30Rf-HYݺ-`I9%lIDTm\ S{]9gOڒMNCV\G*2JRŨ;Rҏ^ڽ̱mq1Eu?To3I)y^#jJw^Ńj^vvlB_⋌P4x>0$c>K†Aļ9s_VjTt0l#m>E-,,x,-W)سo&96RE XR.6bXw+)GAEvL)͞K4$p=Ũi_ѱOjb HY/+@θH9޼]Nԥ%n{ &zjT? Ty) s^ULlb,PiTf^<À] 62R^V7)S!nllS6~͝V}-=%* ʻ>G DnK<y&>LPy7'r=Hj 9V`[c"*^8HpcO8bnU`4JȪAƋ#1_\ XϘHPRgik(~G~0DAA_2p|J묭a2\NCr]M_0 ^T%e#vD^%xy-n}-E\3aS%yN!r_{ )sAw ڼp1pEAk~v<:`'ӭ^5 ArXOI驻T (dk)_\ PuA*BY]yB"l\ey hH*tbK)3 IKZ򹞋XjN n *n>k]X_d!ryBH ]*R 0(#'7 %es9??ښFC,ՁQPjARJ\Ρw K#jahgw;2$l*) %Xq5!U᢯6Re] |0[__64ch&_}iL8KEgҎ7 M/\`|.p,~`a=BR?xܐrQ8K XR2M8f ?`sgWS%" Ԉ 7R%$ N}?QL1|-эټwIZ%pvL3Hk>,ImgW7{E xPHx73RA @RS CC !\ȟ5IXR^ZxHл$Q[ŝ40 (>+ _C >BRt<,TrT {O/H+˟Pl6 I B)/VC<6a2~(XwV4gnXR ϱ5ǀHٻ?tw똤Eyxp{#WK qG%5],(0ӈH HZ])ג=K1j&G(FbM@)%I` XRg ʔ KZG(vP,<`[ Kn^ SJRsAʠ5xՅF`0&RbV tx:EaUE/{fi2;.IAwW8/tTxAGOoN?G}l L(n`Zv?pB8K_gI+ܗ #i?ޙ.) p$utc ~DžfՈEo3l/)I-U?aԅ^jxArA ΧX}DmZ@QLےbTXGd.^|xKHR{|ΕW_h] IJ`[G9{).y) 0X YA1]qp?p_k+J*Y@HI>^?gt.06Rn ,` ?);p pSF9ZXLBJPWjgQ|&)7! HjQt<| ؅W5 x W HIzYoVMGP Hjn`+\(dNW)F+IrS[|/a`K|ͻ0Hj{R,Q=\ (F}\WR)AgSG`IsnAR=|8$}G(vC$)s FBJ?]_u XRvύ6z ŨG[36-T9HzpW̞ú Xg큽=7CufzI$)ki^qk-) 0H*N` QZkk]/tnnsI^Gu't=7$ Z;{8^jB% IItRQS7[ϭ3 $_OQJ`7!]W"W,)Iy W AJA;KWG`IY{8k$I$^%9.^(`N|LJ%@$I}ֽp=FB*xN=gI?Q{٥4B)mw $Igc~dZ@G9K X?7)aK%݅K$IZ-`IpC U6$I\0>!9k} Xa IIS0H$I H ?1R.Чj:4~Rw@p$IrA*u}WjWFPJ$I➓/6#! LӾ+ X36x8J |+L;v$Io4301R20M I$-E}@,pS^ޟR[/s¹'0H$IKyfŸfVOπFT*a$I>He~VY/3R/)>d$I>28`Cjw,n@FU*9ttf$I~<;=/4RD~@ X-ѕzἱI$: ԍR a@b X{+Qxuq$IЛzo /~3\8ڒ4BN7$IҀj V]n18H$IYFBj3̵̚ja pp $Is/3R Ӻ-Yj+L;.0ŔI$Av? #!5"aʄj}UKmɽH$IjCYs?h$IDl843.v}m7UiI=&=0Lg0$I4: embe` eQbm0u? $IT!Sƍ'-sv)s#C0:XB2a w I$zbww{."pPzO =Ɔ\[ o($Iaw]`E).Kvi:L*#gР7[$IyGPI=@R 4yR~̮´cg I$I/<tPͽ hDgo 94Z^k盇΄8I56^W$I^0̜N?4*H`237}g+hxoq)SJ@p|` $I%>-hO0eO>\ԣNߌZD6R=K ~n($I$y3D>o4b#px2$yڪtzW~a $I~?x'BwwpH$IZݑnC㧄Pc_9sO gwJ=l1:mKB>Ab<4Lp$Ib o1ZQ@85b̍ S'F,Fe,^I$IjEdù{l4 8Ys_s Z8.x m"+{~?q,Z D!I$ϻ'|XhB)=…']M>5 rgotԎ 獽PH$IjIPhh)n#cÔqA'ug5qwU&rF|1E%I$%]!'3AFD/;Ck_`9 v!ٴtPV;x`'*bQa w I$Ix5 FC3D_~A_#O݆DvV?<qw+I$I{=Z8".#RIYyjǪ=fDl9%M,a8$I$Ywi[7ݍFe$s1ՋBVA?`]#!oz4zjLJo8$I$%@3jAa4(o ;p,,dya=F9ً[LSPH$IJYЉ+3> 5"39aZ<ñh!{TpBGkj}Sp $IlvF.F$I z< '\K*qq.f<2Y!S"-\I$IYwčjF$ w9 \ߪB.1v!Ʊ?+r:^!I$BϹB H"B;L'G[ 4U#5>੐)|#o0aڱ$I>}k&1`U#V?YsV x>{t1[I~D&(I$I/{H0fw"q"y%4 IXyE~M3 8XψL}qE$I[> nD?~sf ]o΁ cT6"?'_Ἣ $I>~.f|'!N?⟩0G KkXZE]ޡ;/&?k OۘH$IRۀwXӨ<7@PnS04aӶp.:@\IWQJ6sS%I$e5ڑv`3:x';wq_vpgHyXZ 3gЂ7{{EuԹn±}$I$8t;b|591nءQ"P6O5i }iR̈́%Q̄p!I䮢]O{H$IRϻ9s֧ a=`- aB\X0"+5"C1Hb?߮3x3&gşggl_hZ^,`5?ߎvĸ%̀M!OZC2#0x LJ0 Gw$I$I}<{Eb+y;iI,`ܚF:5ܛA8-O-|8K7s|#Z8a&><a&/VtbtLʌI$I$I$I$I$I$IRjDD%tEXtdate:create2022-05-31T04:40:26+00:00!Î%tEXtdate:modify2022-05-31T04:40:26+00:00|{2IENDB`Mini Shell

HOME


Mini Shell 1.0
DIR:/opt/alt/python38/lib64/python3.8/site-packages/psutil/__pycache__/
Upload File :
Current File : //opt/alt/python38/lib64/python3.8/site-packages/psutil/__pycache__/_pslinux.cpython-38.pyc
U

�=�_�@�@s@dZddlmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlmZddlmZddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddlm$Z$ddlm%Z%ddlm&Z&ddlm'Z'ddlm(Z(ddlm)Z)ddl*m+Z+ddl*m,Z,ddl*m-Z-dd l*m.Z.dd!l*m/Z/dd"l*m0Z0ej1d#k�r�ddl2Z2ndZ2d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3gZ3d4Z4ej5�6d5e�7��Z8e9ed6�Z:e9ed7�Z;e<�Z=e�>d8�Z?e�@�ZAdaBe0�rhd9nd:ZCejDd;kZEd<ZFe2dk�r�e
jGZHne2�Id=d>eJe
jG�i�ZKeKjHZHe2dk�r�dZLdZMd?ZNd@ZOn GdAdB�dBe2jI�ZPeQ��RePjS�ejTejUejVejWejXejYejZejZej[ej\ej]ej^dC�Z_ej`ejaejbejcejdejeejfejgejhejiejjdD�ZkedEdFdGdHdIdJdKdLdMdNdOdPg�ZledQdRdSdTdUdVdWdXdYdZg	�Zmed[d\d]d^d_d`g�Znedadb�Zoedceojpdd�Zqeded\dfdgdhdidjdkdldmdndog�Zredpdqdr�serjp��ZtedsdRdSdTdUdtdug�Zuedvdwdxdydzd{g�Zvd|d}�Zwd~d�Zxd�d��Zyed�d���Zze=d�fd�d��Z{zezd��Wn0e|k
�r�e
�}�ed�d��d�d�d��a~YnXdZzdd�l�mZWnBe�k
�r�ddl�Z�e�j�dd�d��Z�e9e�d���r�d�d�d��ZYnXedk	�re3��d�d��e�e�D��d�d��Z�d�d��Z�d�d��Z�d�d��Z�d�d��Z�d�d��Z�d�d��Z�d�d��Z�ej5�6d���s\ej5�6d���rfd�d��Z�n ej5�6d���r~d�d��Z�nd�d��Z�ej�Z�Gd�d��d�e|�Z�Gd�d��d��Z�e��Z�d�d�d��Z�d�d��Z�d�d��Z�ej�Z�d�d�d��Z�d�d�d��Z�d�d��Z�d�d��Z�d�d��Z�d�d��Z�d�d��Z�d�dÄZ�d�dńZ�d�dDŽZ�d�dɄZ�Gd�d˄d�e<�Z�dS)�zLinux platform implementation.�)�divisionN)�defaultdict)�
namedtuple�)�_common)�_psposix)�
_psutil_linux)�
_psutil_posix)�AccessDenied)�debug)�decode)�get_procfs_path)�
isfile_strict)�memoize)�memoize_when_activated)�NIC_DUPLEX_FULL)�NIC_DUPLEX_HALF)�NIC_DUPLEX_UNKNOWN)�
NoSuchProcess)�open_binary)�	open_text)�parse_environ_block)�path_exists_strict)�
supports_ipv6)�
usage_percent)�
ZombieProcess)�b)�
basestring)�FileNotFoundError)�PermissionError)�ProcessLookupError)�PY3)��ZPROCFS_PATH�IOPRIO_CLASS_NONE�IOPRIO_CLASS_RT�IOPRIO_CLASS_BE�IOPRIO_CLASS_IDLE�CONN_ESTABLISHED�
CONN_SYN_SENT�
CONN_SYN_RECV�CONN_FIN_WAIT1�CONN_FIN_WAIT2�CONN_TIME_WAIT�
CONN_CLOSE�CONN_CLOSE_WAIT�
CONN_LAST_ACK�CONN_LISTEN�CONN_CLOSINGz/sys/class/power_supplyz/proc/%s/smaps�proc_ioprio_get�proc_cpu_affinity_get�
SC_CLK_TCK���i �littlei�
AddressFamily�AF_LINK�r"c@seZdZdZdZdZdZdS)�
IOPriorityrrr:r"N)�__name__�
__module__�__qualname__r$r%r&r'�r?r?�B/opt/alt/python38/lib64/python3.8/site-packages/psutil/_pslinux.pyr;wsr;)�R�S�D�T�t�Z�X�x�K�W�I�P)Z01Z02Z03Z04Z05Z06Z07Z08Z09Z0AZ0B�svmem�total�	available�percent�used�free�active�inactive�buffers�cached�shared�slab�sdiskioZ
read_countZwrite_countZ
read_bytesZwrite_bytesZ	read_timeZ
write_timeZread_merged_countZwrite_merged_count�	busy_time�	popenfile�path�fdZposition�mode�flags�pmemz"rss vms shared text lib data dirty�pfullmem)�uss�pss�swap�
pmmap_grouped�rss�sizercZshared_cleanZshared_dirtyZ
private_cleanZ
private_dirtyZ
referencedZ	anonymousrd�	pmmap_extzaddr perms � �pioZ
read_charsZwrite_chars�	pcputimes�user�system�
children_user�children_system�iowaitcCsLt|t�st|��t�|�}|�d�d}|�d�rHt|�sH|dd�}|S)zWrapper around os.readlink().�r�
 (deleted)N���)�
isinstancer�AssertionError�os�readlink�split�endswithr)r\r?r?r@rw�s
rwcCsXtjdtjdtjdi}||tjtjBtjB@}|tj@rH|�ddd�}|�dd�}|S)zZConvert file's open() flags into a readable string.
    Used by Process.open_files().
    �r�wzw+�arzr+)rv�O_RDONLY�O_WRONLY�O_RDWR�O_APPEND�replace)r_Z	modes_mapr^r?r?r@�file_flags_to_mode�s
r�cCs4|�dd�}d}|rd|}nd|}t�|tj�S)z�Return True if the given name refers to a root device (e.g.
    "sda", "nvme0n1") as opposed to a logical partition (e.g.  "sda1",
    "nvme0n1p1"). If name is a virtual device (e.g. "loop1", "ram")
    return True.
    �/�!Tz
/sys/block/%sz/sys/block/%s/device)r�rv�access�F_OK)�nameZincluding_virtualr\r?r?r@�is_storage_device�s

r�c	Cs�td|��}|����dd�}W5QRXdddddd	d
g}t|�}|dkrX|�d�|d
krj|�d�|dkr||�d�td|�adS)z�Set a namedtuple of variable fields depending on the CPU times
    available on this Linux kernel version which may be:
    (user, nice, system, idle, iowait, irq, softirq, [steal, [guest,
     [guest_nice]]])
    Used by cpu_times() function.
    �%s/statrNrl�nicermZidlerpZirqZsoftirq�Zsteal�	Zguest�
Z
guest_nice�	scputimes)r�readlinerx�len�appendrr�)�procfs_path�f�values�fieldsZvlenr?r?r@�set_scputimes_ntuples	


r�Tc
Csjz:|rt|�nt|��}|����W5QR�WSQRXWn*ttfk
rd|tk	r^|YS�YnXdS)z�Return file content.
    fallback: the value returned in case the file does not exist or
              cannot be read
    binary: whether to open the file in binary or text mode.
    N)rr�read�strip�IOError�OSError�_DEFAULT)�fname�fallback�binaryr�r?r?r@�cats$r��/procr�zuser system idle�)�prlimit)Z	use_errnor�cCs�Gdd�dtj�}|�}|dkr8t�||dt�|��}n6|�}|d|_|d|_t�||t�|�t�|��}|dkr�t��}t|t	�
|���|j|jfS)Nc@s eZdZdejfdejfgZdS)zprlimit.<locals>.StructRlimit�rlim_cur�rlim_maxN)r<r=r>�ctypesZ
c_longlongZ_fields_r?r?r?r@�StructRlimitJs�r�rr)r�Z	Structure�libcr�Zbyrefr�r�Z	get_errnor�rv�strerror)�pid�	resource_�limitsr��current�ret�new�errnor?r?r@r�Is"

�cCs"g|]}|�d�r|��r|�qS)ZRLIM)�
startswith�isupper��.0rHr?r?r@�
<listcomp>bs
r�c	Cs|d}||�dd�}z|d}|d}|d}Wntk
rL|YSXztdt��}Wntk
rx|YSXd}|�6|D]*}|��}|�d�r�|t|��d	�7}q�W5QRX|t	9}||}	||}
|
t
|
d
|�8}
|	|
7}	|	|t
|d|�7}	t|	�S)a�Fallback for kernels < 3.14 where /proc/meminfo does not provide
    "MemAvailable:" column, see:
    https://blog.famzah.net/2014/09/24/
    This code reimplements the algorithm outlined here:
    https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/
        commit/?id=34e431b0ae398fc54ea69ff85ec700722c9da773

    XXX: on recent kernels this calculation differs by ~1.5% than
    "MemAvailable:" as it's calculated slightly differently, see:
    https://gitlab.com/procps-ng/procps/issues/42
    https://github.com/famzah/linux-memavailable-procfs/issues/2
    It is still way more realistic than doing (free + cached) though.
    �MemFree:�Cached:rs
Active(file):sInactive(file):�
SReclaimable:z%s/zoneinfoslowrr:g@)�get�KeyErrorrr
r�r�r��intrx�PAGESIZE�min)�memsrRr�Zlru_active_fileZlru_inactive_fileZslab_reclaimabler�Z
watermark_low�line�availZ	pagecacher?r?r@�calculate_avail_vmemjs2


 r�cCs�g}i}tdt���0}|D]$}|��}t|d�d||d<qW5QRX|d}|d}z|d}Wn"tk
r�d}|�d�YnXz|d	}Wn"tk
r�d}|�d
�YnX||�dd�7}z|d}	WnHtk
�r z|d
}	Wn$tk
�rd}	|�d�YnXYnXz|d}
Wn$tk
�rRd}
|�d�YnXz|d}WnXtk
�r�z|d|d|d}Wn$tk
�r�d}|�d�YnXYnXz|d}Wntk
�r�d}YnX||||}
|
dk�r||}
z|d}Wntk
�r.t|�}YnX|dk�rHd}|�d�||k�rV|}t|||dd�}|�r�dd�	|�t
|�dk�r�dndf}t�|t
�t||||
||
||||	|�S)a�Report virtual memory stats.
    This implementation matches "free" and "vmstat -s" cmdline
    utility values and procps-ng-3.3.12 source was used as a reference
    (2016-09-18):
    https://gitlab.com/procps-ng/procps/blob/
        24fd2605c51fccc375ab0287cec33aa767f06718/proc/sysinfo.c
    For reference, procps-ng-3.3.10 is the version available on Ubuntu
    16.04.

    Note about "available" memory: up until psutil 4.3 it was
    calculated as "avail = (free + buffers + cached)". Now
    "MemAvailable:" column (kernel 3.14) from /proc/meminfo is used as
    it's more accurate.
    That matches "available" column in newer versions of "free".
    �
%s/meminfor�rs	MemTotal:r�sBuffers:rUr�rVr�sShmem:s
MemShared:rWsActive:rSs	Inactive:sInact_dirty:sInact_clean:sInact_laundry:rTsSlab:s
MemAvailable:rO�Zround_z6%s memory stats couldn't be determined and %s set to 0�, ZwasZwere)rr
rxr�r�r�r�r�r�joinr��warnings�warn�RuntimeWarningrM)Zmissing_fieldsr�r�r�r�rNrRrUrVrWrSrTrXrQr�rP�msgr?r?r@�virtual_memory�s�$���

	


��r�c
Cs�i}tdt���0}|D]$}|��}t|d�d||d<qW5QRXz|d}|d}Wn:tk
r�t��\}}}}}}}||9}||9}YnX||}t||dd�}	ztdt��}WnDtk
�r}
z$d	t	|
�}t
�|t�d}}
W5d
}
~
XYn�X|��d
}}
|D]n}|�
d��rDt|�d�d�d
d}n&|�
d��rjt|�d�d�d
d}
|d
k	�r|
d
k	�r�q��qd}t
�|t�d}}
W5QRXt�||||	||
�S)zReturn swap memory metrics.r�rr�rs
SwapTotal:s	SwapFree:r�z	%s/vmstatzP'sin' and 'sout' swap memory stats couldn't be determined and were set to 0 (%s)Nspswpin� r#spswpoutzK'sin' and 'sout' swap memory stats couldn't be determined and were set to 0)rr
rxr�r��cextZ
linux_sysinforr��strr�r�r�r�rZsswap)r�r�r�r�rNrR�_Zunit_multiplierrQrP�errr�ZsinZsoutr?r?r@�swap_memorysF$�
r�c	Cs^t�}t|�td|��}|����}W5QRX|dttj�d�}dd�|D�}t|�S)z�Return a named tuple representing the following system-wide
    CPU times:
    (user, nice, system, idle, iowait, irq, softirq [steal, [guest,
     [guest_nice]]])
    Last 3 fields may not be available on all Linux kernel versions.
    r�rcSsg|]}t|�t�qSr?��float�CLOCK_TICKSr�r?r?r@r�^szcpu_times.<locals>.<listcomp>)r
r�rr�rxr�r��_fields)r�r�r�r�r?r?r@�	cpu_timesRsr�c
Cs�t�}t|�g}td|��l}|��|D]L}|�d�r,|��}|dttj�d�}dd�|D�}t|�}|�	|�q,|W5QR�SQRXdS)zfReturn a list of namedtuple representing the CPU times
    for every CPU available on the system.
    r�scpurcSsg|]}t|�t�qSr?r�r�r?r?r@r�psz!per_cpu_times.<locals>.<listcomp>N)
r
r�rr�r�rxr�r�r�r�)r��cpusr�r�r�r��entryr?r?r@�
per_cpu_timesbs
r�cCs�zt�d�WStk
r�d}tdt���&}|D]}|���d�r4|d7}q4W5QRX|dkr�t�d�}t	dt���0}|D]$}|�
d�d}|�|�r�|d7}q�W5QRX|dkr�Yd	S|YSXd	S)
z0Return the number of logical CPUs in the system.�SC_NPROCESSORS_ONLNr�
%s/cpuinfos	processorrzcpu\dr�riN)rv�sysconf�
ValueErrorrr
�lowerr��re�compilerrx�match)�numr�r��searchr?r?r@�cpu_count_logicalvs$

r�c
Cs
t�}d}d}t�|�p t�|�D]*}t|��}|�|�����W5QRXq"t|�}|dkrb|Si}i}tdt���v}|D]j}|����}|s�z|d||d<Wnt	k
r�YnXi}q~|�
d�r~|�dd	�\}	}
t|
�||	<q~W5QRXt
|���}|�pd
S)z2Return the number of physical cores in the system.z9/sys/devices/system/cpu/cpu[0-9]*/topology/core_cpus_listz?/sys/devices/system/cpu/cpu[0-9]*/topology/thread_siblings_listrr��	cpu cores�physical id)r�r�s	:rN)�set�globr�addr�r�r�r
r�r�r�rxr��sumr�)�lsZp1Zp2r\r��result�mappingZcurrent_infor��key�valuer?r?r@�cpu_count_physical�s4
�
r�c	Cs�tdt����}d}d}d}|D]r}|�d�r@t|��d�}n6|�d�r\t|��d�}n|�d�rvt|��d�}|dk	r |dk	r |dk	r q�q W5QRXd}t�||||�S)z*Return various CPU stats as a named tuple.r�Nsctxtrsintrssoftirqr)rr
r�r�rxrZ	scpustats)r�Zctx_switchesZ
interruptsZsoft_interruptsr�Zsyscallsr?r?r@�	cpu_stats�s,


��r�z'/sys/devices/system/cpu/cpufreq/policy0z$/sys/devices/system/cpu/cpu0/cpufreqcCs�dd�}g}tt��D]�}||�}|s(qtjj}t||d�dd�}|dkrlt||d�dd�}|dkrltd��t|�d}tt||d	���d}tt||d
���d}|�t	�
|||��q|S)z�Return frequency metrics for all CPUs.
        Contrarily to other OSes, Linux updates these values in
        real-time.
        cSs.d|d|fD]}tj�|�r|SqdS)Nz(/sys/devices/system/cpu/cpufreq/policy%sz%/sys/devices/system/cpu/cpu%s/cpufreq)rvr\�exists)r��pr?r?r@�get_path�s
�zcpu_freq.<locals>.get_pathZscaling_cur_freqN�r�Zcpuinfo_cur_freqz!can't find current frequency filei�Zscaling_max_freqZscaling_min_freq)�ranger�rvr\r�r��NotImplementedErrorr�r�r�scpufreq)r�r��nr\ZpjoinZcurrZmax_Zmin_r?r?r@�cpu_freq�s&�r�z
/proc/cpuinfoc	Csbg}tdt���F}|D]:}|���d�r|�dd�\}}|�t�t|�dd��qW5QRX|S)z}Alternate implementation using /proc/cpuinfo.
        min and max frequencies are not available and are set to None.
        r�scpu mhz�:rr�)	rr
r�r�rxr�rr�r�)r�r�r�r�r�r?r?r@r��s$cCsgS)zGDummy implementation when none of the above files are present.
        r?r?r?r?r@r�sc@seZdZdS)�_Ipv6UnsupportedErrorN)r<r=r>r?r?r?r@r�sr�c@sZeZdZdZdd�Zdd�Zdd�Zedd	��Zeddd��Z	edd
d��Z
ddd�Zd
S)�ConnectionsawA wrapper on top of /proc/net/* files, retrieving per-process
    and system-wide open connections (TCP, UDP, UNIX) similarly to
    "netstat -an".

    Note: in case of UNIX sockets we're only able to determine the
    local endpoint/path, not the one it's connected to.
    According to [1] it would be possible but not easily.

    [1] http://serverfault.com/a/417946
    cCs�dtjtjf}dtjtjf}dtjtjf}dtjtjf}dtjdf}|||||f||f|f|f||f|f|f|f||||f||f||fd�|_d|_dS)N�tcp�tcp6�udp�udp6�unix)�allr��tcp4r�r��udp4rr�inetZinet4Zinet6)�socket�AF_INET�SOCK_STREAM�AF_INET6Z
SOCK_DGRAMZAF_UNIX�tmap�_procfs_path)�selfrr�rrrr?r?r@�__init__ s$
�
zConnections.__init__cCs�tt�}t�d|j|f�D]�}ztd|j||f�}WnRttfk
rTYqYqtk
r�}z|j	t	j
krxWY�q�W5d}~XYqX|�d�r|dd�dd�}||�|t
|�f�q|S)N�%s/%s/fd�%s/%s/fd/%szsocket:[r�r6)r�listrv�listdirrrwrr r�r��EINVALr�r�r�)rr��inodesr]�inoder�r?r?r@�get_proc_inodes7s
zConnections.get_proc_inodescCsHi}t�D]8}z|�|�|��Wq
tttfk
r@Yq
Yq
Xq
|S�N)�pids�updaterrr r)rrr�r?r?r@�get_all_inodesMs
zConnections.get_all_inodesc	Cs�|�d�\}}t|d�}|s dStr.|�d�}|tjkrntrZt�|t�	|�ddd��}q�t�|t�	|��}nxt�	|�}zJtr�t�tj
tjd	t�
d|����}n t�tj
tjd
t�
d|����}Wn"tk
r�t�s�t�n�YnXt�||�S)a�Accept an "ip:port" address as displayed in /proc/net/*
        and convert it into a human readable form, like:

        "0500000A:0016" -> ("10.0.0.5", 22)
        "0000000000000000FFFF00000100007F:9E49" -> ("::ffff:127.0.0.1", 40521)

        The IP address portion is a little or big endian four-byte
        hexadecimal number; that is, the least significant byte is listed
        first, so we need to reverse the order of the bytes to convert it
        to an IP address.
        The port is represented as a two-byte hexadecimal number.

        Reference:
        http://linuxdevcenter.com/pub/a/linux/2000/11/16/LinuxAdmin.html
        �:�r?�asciiNr6�>4I�<4I)r)r)rxr�r!�encoderr�
LITTLE_ENDIANZ	inet_ntop�base64Z	b16decoder	�struct�pack�unpackr�rr�r�addr)r%�familyZipZportr?r?r@�decode_address]s4



��zConnections.decode_addressNccs@|�d�rtj�|�sdSt|td���}|��t|d�D]�\}}z(|��dd�\
}}	}
}}}}}}}Wn&t	k
r�t
d|||f��YnX||kr�||d\}
}nd\}
}|dk	r�||
kr�q<q<|tjkr�t
|}ntj}zt�|	|�}	t�|
|�}
Wntk
�rYq<YnX||||	|
||
fVq<W5QRXdS)	z.Parse /proc/net/tcp* and /proc/net/udp* files.�6N��	bufferingrr�z,error while parsing %s; malformed line %s %rr�Nr6)ryrvr\r�r�BIGFILE_BUFFERINGr��	enumeraterxr��RuntimeErrorrr�TCP_STATUSESr�	CONN_NONEr�r'r�)�filer&�type_r�
filter_pidr��linenor�r��laddr�raddr�statusrr�r]r?r?r@�process_inet�s<���



zConnections.process_inetc
cst|td���}|��|D]�}|��}z|dd�\}}}}}}}	Wn0tk
rtd|kr`Yqtd||f��YnX|	|kr�||	}
ndg}
|
D]b\}}|dk	r�||kr�q�q�t|�dkr�|d	}
nd
}
t�t	|��}d
}tj
}||||
|||fVq�qW5QRXdS)zParse /proc/net/unix files.r)r�riz)error while parsing %s; malformed line %rr+Nr�r6�)rr,r�rxr�r.r�rZsocktype_to_enumr�r0)r1r&rr3r�r��tokensr�r2rZpairsr�r]r\r6r7r?r?r@�process_unix�s8��


zConnections.process_unixcCs||jkr,td|d�dd�|jD��f��t�|_|dk	rP|�|�}|sXgSn|��}t�}|j|D]�\}}}d|j|f}|tj	tj
fkr�|j|||||d�}	n|j||||d�}	|	D]L\}
}}}}}
}|r�t
�|
|||||
�}nt
�|
|||||
|�}|�|�q�qht|�S)Nz+invalid %r kind argument; choose between %sr�cSsg|]}t|��qSr?)�reprr�r?r?r@r��sz(Connections.retrieve.<locals>.<listcomp>z	%s/net/%s)r3)r
r�r�r
rrrr�rrr	r8r<rZpconnZsconnr�r)r�kindr�rr�Z
proto_namer&r2r\r�r]r5r6r7Z	bound_pidZconnr?r?r@�retrieve�sL
�
����zConnections.retrieve)N)N)N)r<r=r>�__doc__r
rr�staticmethodr'r8r<r?r?r?r?r@r�s
2'%r�rcCs
t�|�S)z$Return system-wide open connections.)�_connectionsr?)r>r?r?r@�net_connectionssrCcCs�tdt���}|��}W5QRXi}|dd�D]�}|�d�}|dksTtt|���|d|���}||dd�����}tt	|�\}}}	}
}}}
}}}}}}}}}|||||	||
|f||<q2|S)zsReturn network I/O statistics for every network interface
    installed on the system as a dict of raw tuples.
    z
%s/net/devr:Nrrr)
rr
�	readlines�rfindrur=r�rx�mapr�)r��lines�retdictr�Zcolonr�r�Z
bytes_recvZpackets_recvZerrinZdropinZfifoinZframeinZcompressedinZmulticastinZ
bytes_sentZpackets_sentZerroutZdropoutZfifooutZ
collisionsoutZ
carrieroutZ
compressedoutr?r?r@�net_io_counterss@
��
rIc	Cs�tjttjttjti}t���}i}|D]t}z&t	�
|�}t	�|�}t�|�\}}Wn0t
k
r�}z|jtjkrr�W5d}~XYq(Xt�|||||�||<q(|S)z)Get NIC stats (isup, duplex, speed, mtu).N)r�ZDUPLEX_FULLrZDUPLEX_HALFrZDUPLEX_UNKNOWNrrI�keys�
cext_posixZ
net_if_mtuZnet_if_is_runningZnet_if_duplex_speedr�r�ZENODEVrZ	snicstats)	Z
duplex_map�namesr�r�ZmtuZisupZduplexZspeedr�r?r?r@�net_if_stats+s$�


rMFcCs�dd�}dd�}tj�dt��r*|�}n"tj�d�r>|�}ntdt���i}|D]T}|\
}}}}	}
}}}
}}|s~t|�s~qT|	t9}	|
t9}
|||	|
|||
||f	||<qT|S)zcReturn disk I/O statistics for every disk installed on the
    system as a dict of raw tuples.
    css0tdt���}|��}W5QRX|D�]}|��}t|�}|dkr�|d}t|d�}tt|dd��\
}}}	}
}}}
}}}n�|dks�|dkr�|d}tt|dd��\}}}}	}
}}}
}}}nN|dk�r|d}tt|dd��\}}}
}d	}	}
}}}ntd
|��|||
|||	|
|||f
Vq&dS)N�%s/diskstats�r"r:r#��r9rz!not sure how to interpret line %r)rr
rDrxr�r�rFr�)r�rGr�r�Zflenr��reads�reads_merged�rbytes�rtime�writes�
writes_merged�wbytes�wtimer�rZr?r?r@�read_procfsLsH
����
�z%disk_io_counters.<locals>.read_procfscss�t�d�D]�}t�tj�d|��D]�\}}}d|kr6q"ttj�|d���}|������}W5QRXtj�	|�}t
t|dd��\
}}}	}
}}}
}}}||||	|
|
||||f
Vq"q
dS)N�
/sys/block�statr�)rvr�walkr\r�rr�r�rx�basenamerFr�)�block�rootr��filesr�r�r�rRrSrTrUrVrWrXrYrZr?r?r@�
read_sysfsws&��z$disk_io_counters.<locals>.read_sysfsrNr[zC%s/diskstats nor /sys/block filesystem are available on this system)rvr\r�r
r�r��DISK_SECTOR_SIZE)ZperdiskrZrb�genrHr�r�rRrVrTrXrUrYrSrWrZr?r?r@�disk_io_countersHs6+
����
rec	Cst�}t�}td|��R}|D]F}|��}|�d�sD|�|���q|�d�d}|dkr|�d�qW5QRX|dkr�tj�	d�r�tj�
d�}ntj�
d|�}g}t�|�}|D]X}	|	\}
}}}|
d	kr�d
}
|s�|
d
ks�||kr�q�d}
}t
�|
||||
|�}|�|�q�|S)z8Return mounted disk partitions as a list of namedtuples.z%s/filesystemsZnodev�	rZzfsr�z	/etc/mtabz%s/self/mountsZnoner:N)r�r
rr�r�r�rxrvr\�isfile�realpathr��disk_partitionsrZ	sdiskpartr�)rZfstypesr�r�r�ZfstypeZmounts_path�retlistZ
partitions�	partitionZdeviceZ
mountpointZoptsZmaxfileZmaxpath�ntupler?r?r@ri�s:

�ricCsht�t�}t�d�}|�t�d��ttdd�|D���}t�d�}t�d�}|D]"}|�	d|�}||krR|�
|�qR|D�]}z>|d}tt|��d	}t
j�t
j�|�d
�}t|dd�}	Wntttfk
r�YqzYnXt|d
dd�}
t|ddd�}t|dddd�}|
dk	�rFzt|
�d	}
Wntk
�rDd}
YnX|dk	�r|zt|�d	}Wntk
�rzd}YnX||	�
|||
|f�qz|�s`t�d�}tt|��}|D�]�}z<t
j�|d�}tt|��d	}t
j�|d�}t|dd�}	WnDtttfk
�r:}
ztd|
|f�WY��q�W5d}
~
XYnXt�|d�}tdd�|D��}d}d}
|D]�}t
j�||d�}t|ddd�}|dk�r�tt
j�||d�dd�}n$|dk�r�tt
j�||d�dd�}
|
dk	�rzt|
�d	}
Wntk
�r
d}
YnX|dk	�rhzt|�d	}Wntk
�r@d}YnX�qh||	�
d||
|f��q�t|�S)a�Return hardware (CPU and others) temperatures as a dict
    including hardware name, label, current, max and critical
    temperatures.

    Implementation notes:
    - /sys/class/hwmon looks like the most recent interface to
      retrieve this info, and this implementation relies on it
      only (old distros will probably use something else)
    - lm-sensors on Ubuntu 16.04 relies on /sys/class/hwmon
    - /sys/class/thermal/thermal_zone* is another one but it's more
      difficult to parse
    z/sys/class/hwmon/hwmon*/temp*_*z&/sys/class/hwmon/hwmon*/device/temp*_*cSsg|]}|�d�d�qS�r�r�rxr�r?r?r@r��sz(sensors_temperatures.<locals>.<listcomp>z5/sys/devices/platform/coretemp.*/hwmon/hwmon*/temp*_*z'/sys/devices/platform/coretemp.*/hwmon/z/sys/class/hwmon/�_inputg@�@r�F�r�Z_maxNr�Z_crit�_labelr:�r�r�z /sys/class/thermal/thermal_zone*Ztemp�typezignoring %r for file %rz/trip_point*cSs,g|]$}d�tj�|��d�dd���qS)r�rr")r�rvr\r^rx)r�r�r?r?r@r�%s��Z_type�criticalZ_temp�high)�collectionsrrr��extend�sortedr�r�r��subr�r�r�rvr\r��dirnamer�r�r�r�dict)r��	basenamesZ
basenames2�replr�Zaltname�baser\r��	unit_namerurt�labelr�Z
trip_pathsZtrip_pointsZ
trip_pointZ	trip_typer?r?r@�sensors_temperatures�s�

�

	






�
�
�


r�cCs�t�t�}t�d�}|s"t�d�}ttdd�|D���}|D]�}ztt|d��}Wn>tt	fk
r�}zt
�d|t�WY�q<W5d}~XYnXtt
j�t
j�|�d�d	d
�}t|ddd	d
�}||�t�||��q<t|�S)a�Return hardware fans info (for CPU and other peripherals) as a
    dict including hardware label and current speed.

    Implementation notes:
    - /sys/class/hwmon looks like the most recent interface to
      retrieve this info, and this implementation relies on it
      only (old distros will probably use something else)
    - lm-sensors on Ubuntu 16.04 relies on /sys/class/hwmon
    z/sys/class/hwmon/hwmon*/fan*_*z%/sys/class/hwmon/hwmon*/device/fan*_*cSsg|]}|�d�d�qSrmrnr�r?r?r@r�Tsz sensors_fans.<locals>.<listcomp>rozignoring %rNr�Frprqr:rr)rvrrr�rxr�r�r�r�r�r�r�r�rvr\r�rzr�rZsfanr{)r�r|r~r�r�rr�r?r?r@�sensors_fansCs"



�r�cs�t���fdd�}dd�t�t�D�}|s.dStj�tt|�d�}||d|d�}||d	|d
�}||d|d�}||d
�}|dk	r�|dk	r�zd||}Wq�tk
r�d}Yq�Xn tt	|ddd��}|dkr�dSd}|tj�td�tj�td��}	|	dk	�r|	dk}n4t	|dddd��
�}
|
dk�r>d}n|
dk�rLd}|�rZtj}nv|dk	�r�|dk	�r�zt||d�}Wntk
�r�tj
}YnXn.|dk	�r�t|d�}|dk�r�tj
}ntj
}t�|||�S)aReturn battery information.
    Implementation note: it appears /sys/class/power_supply/BAT0/
    directory structure may vary and provide files with the same
    meaning but under different names, see:
    https://github.com/giampaolo/psutil/issues/966
    cs:|D]0}t|�d�}|�kr|��r,t|�n|SqdS)zvAttempt to read the content of multiple files which may
        not exist. If none of them exist return None.
        r�N)r��isdigitr�)�pathsr\r��Znullr?r@�	multi_catls
z"sensors_battery.<locals>.multi_catcSs&g|]}|�d�sd|��kr|�qS)ZBATZbattery)r�r�r�r?r?r@r�vs
�z#sensors_battery.<locals>.<listcomp>Nrz/energy_nowz/charge_nowz
/power_nowz/current_nowz/energy_fullz/charge_fullz/time_to_empty_nowgY@r�z	/capacityr6r�z
AC0/onlinez	AC/onlinerz/statusr:FrrZdischarging)ZchargingZfullTi�<)�objectrvr�POWER_SUPPLY_PATHr\r�rx�ZeroDivisionErrorr�r�r�rZPOWER_TIME_UNLIMITEDZPOWER_TIME_UNKNOWNZsbattery)r�Zbatsr`Z
energy_nowZ	power_nowZenergy_fullZ
time_to_emptyrPZ
power_pluggedZonliner7Zsecsleftr?r�r@�sensors_batterycsh
����





r�c
Cs\g}t��}|D]F}|\}}}}}}|s*q|dkr6d}t�||pBd|||�}	|�|	�q|S)z:Return currently connected users as a list of namedtuples.)z:0.0z:0Z	localhostN)r��usersrZsuserr�)
rjZrawlist�itemrlZttyZhostnameZtstampZuser_processr��ntr?r?r@r��sr�c
Csndt�}t|��R}|D]:}|�d�rt|����d�}|a|W5QR�Sqtd|��W5QRXdS)zAReturn the system boot time expressed in seconds since the epoch.r�sbtimerzline 'btime' not found in %sN)r
rr�r�r�rx�	BOOT_TIMEr.)r\r�r�r�r?r?r@�	boot_time�s


�r�cCsdd�t�tt���D�S)z7Returns a list of PIDs currently running on the system.cSsg|]}|��rt|��qSr?)r�r�r�r?r?r@r��szpids.<locals>.<listcomp>)rvrrr
r?r?r?r@r�src
Cs�t�|�sdSzpdt�|f}t|��P}|D]8}|�d�r,t|��d�}||kW5QR�WSq,td|��W5QRXWn"ttfk
r�|t	�kYSXdS)zcCheck for the existence of a unix PID. Linux TIDs are not
    supported (always return False).
    F�%s/%s/statussTgid:rz'Tgid' line not found in %sN)
r�
pid_existsr
rr�r�rxr��EnvironmentErrorr)r�r\r�r�Ztgidr?r?r@r��s



r�c
Cs�i}t�}t�D]x}z(td||f��}|��}W5QRXWnttfk
rTYqX|�d�}||dd���}t|d�}|||<q|S)zsObtain a {pid: ppid, ...} dict for all running processes in
    one shot. Used to speed up Process.children().
    �
%s/%s/stat�)r:Nr)	r
rrr�rr rErxr�)r�r�r�r��data�rparZdset�ppidr?r?r@�ppid_maps


r�cst����fdd��}|S)zlDecorator which translates bare OSError and IOError exceptions
    into NoSuchProcess and AccessDenied.
    cs�z�|f|�|�WStk
r4t|j|j��Yn\tk
rTt|j|j��Yn<tk
r�tj�	d|j
|jf�s�t|j|j���YnXdS)N�%s/%s)rr
r��_namer rrrvr\r�r)r�args�kwargs��funr?r@�wrapper%sz wrap_exceptions.<locals>.wrapper)�	functools�wraps)r�r�r?r�r@�wrap_exceptions!s
r�c@steZdZdZdddddgZdd�Zd	d
�Zeedd���Z	eed
d���Z
eedd���Zdd�Zdd�Z
edd��Zdd�Zedd��Zedd��Zedd��Zej�de���r�ed d!��Zed"d#��Zed$d%��Zed`d'd(��Zed)d*��Zed+d,��Ze�r.ee�d-�e�d.�e�d/�fd0d1��Z neZ e�rDed2d3��Z!ed4d5��Z"ee�d6�fd7d8��Z#ee�d9�fd:d;��Z$ed<d=��Z%ed>d?��Z&ed@dA��Z'e(�r�edBdC��Z)e�dD�fdEdF�Z*edGdH��Z+e,�r�edIdJ��Z-edKdL��Z.e/d&k	�redadMdN��Z0edOdP��Z1edQdR��Z2edbdTdU��Z3edVdW��Z4edXdY��Z5ee�dZ�fd[d\��Z6ee�d]�fd^d_��Z7d&S)c�ProcesszLinux process implementation.r�r��_ppidr�_cachecCs||_d|_d|_t�|_dSr)r�r�r�r
r)rr�r?r?r@r
;szProcess.__init__cCst�d|j|jf�dS)z+Raise NSP if the process disappeared on us.r�N)rvr\rr��rr?r?r@�
_assert_aliveAszProcess._assert_alivec	Cs�td|j|jf��}|��}W5QRX|�d�}||�d�d|�}||dd���}i}||d<|d|d	<|d|d
<|d|d<|d
|d<|d|d<|d|d<|d|d<|d|d<|d|d<|d|d<|S)aZParse /proc/{pid}/stat file and return a dict with various
        process info.
        Using "man proc" as a reference: where "man proc" refers to
        position N always substract 3 (e.g ppid position 4 in
        'man proc' == position 1 in here).
        The return value is cached in case oneshot() ctx manager is
        in use.
        r�r��(rr:Nr�rr7r�r#�ttynr��utime��stime�
�children_utimerP�children_stime��create_time�$�cpu_num�'�blkio_ticks)rrr�r�rE�findrx)rr�r�r�r�r�r�r?r?r@�_parse_stat_fileGs$
zProcess._parse_stat_filec
Cs4td|j|jf��}|��W5QR�SQRXdS)z�Read /proc/{pid}/stat file and return its content.
        The return value is cached in case oneshot() ctx manager is
        in use.
        r�N)rrr�r��rr�r?r?r@�_read_status_filejszProcess._read_status_filec
Cs<td|j|jftd��}|����W5QR�SQRXdS)Nz%s/%s/smapsr))rrr�r,r�r�r�r?r?r@�_read_smaps_filets
�zProcess._read_smaps_filecCs(|j�|�|j�|�|j�|�dSr)r�Zcache_activater�r�r�r?r?r@�
oneshot_enter{szProcess.oneshot_entercCs(|j�|�|j�|�|j�|�dSr)r�Zcache_deactivater�r�r�r?r?r@�oneshot_exit�szProcess.oneshot_exitcCs|��d}trt|�}|S)Nr�)r�r!r)rr�r?r?r@r��szProcess.namec	Cs�ztd|j|jf�WSttfk
rxtj�d|j|jf�rHYdSt|j�sbt	|j|j
��nt|j|j
|j��Yn"t
k
r�t|j|j
��YnXdS)Nz	%s/%s/exer�r:)rwrr�rr rvr\�lexistsr�rr�rr�rr
r�r?r?r@�exe�s
zProcess.exec	Cs�td|j|jf��}|��}W5QRX|s0gS|�d�r>dnd}|�|�rX|dd�}|�|�}|dkr�t|�dkr�d|kr�|�d�}|S)Nz
%s/%s/cmdlinerqrir6r)rrr�r�ryrxr�)rr�r��sep�cmdliner?r?r@r��s


zProcess.cmdlinec	Cs0td|j|jf��}|��}W5QRXt|�S)Nz
%s/%s/environ)rrr�r�r)rr�r�r?r?r@�environ�szProcess.environcCs>t|��d�}t��}z
||WStk
r8YdSXdS)Nr�)r�r�rZget_terminal_mapr�)rZtty_nrr
r?r?r@�terminal�s
zProcess.terminalz/proc/%s/ioc
Cs�d|j|jf}i}t|��T}|D]H}|��}|r"z|�d�\}}Wntk
r\Yq"Yq"Xt|�||<q"W5QRX|s�td|��z,t|d|d|d|d|d|d	�WSt	k
r�}ztd
|d||f��W5d}~XYnXdS)Nz%s/%s/ios: z%s file was emptyssyscrssyscws
read_bytesswrite_bytessrcharswcharz1%r field was not found in %s; found fields are %rr)
rr�rr�rxr�r�r.rjr�)rr�r�r�r�r�r�r�r?r?r@�io_counters�s4

��zProcess.io_counterscCsh|��}t|d�t}t|d�t}t|d�t}t|d�t}t|d�t}t|||||�S)Nr�r�r�r�r�)r�r�r�rk)rr�r�r�r�r�rpr?r?r@r��szProcess.cpu_timescCst|��d�S)zWhat CPU the process is on.r��r�r�r�r?r?r@r��szProcess.cpu_numNcCst�|j||j�Sr)rZwait_pidr�r�)rZtimeoutr?r?r@�wait�szProcess.waitcCs&t|��d�}tpt�}|t|S)Nr�)r�r�r�r�r�)r�ctimeZbtr?r?r@r��s
zProcess.create_timec		Cs`td|j|jf��2}dd�|����dd�D�\}}}}}}}W5QRXt|||||||�S)Nz%s/%s/statmcSsg|]}t|�t�qSr?)r�r�r�r?r?r@r�sz'Process.memory_info.<locals>.<listcomp>r9)rrr�r�rxr`)	rr�ZvmsrfrW�text�libr�Zdirtyr?r?r@�memory_infos
�zProcess.memory_infos\nPrivate.*:\s+(\d+)s\nPss\:\s+(\d+)s\nSwap\:\s+(\d+)c	Csj|��}|��}ttt|�|���d}ttt|�|���d}ttt|�|���d}t||||f�S)Nr�)r�r�r�rFr��findallra)	rZ_private_reZ_pss_reZ_swap_reZ	basic_memZ
smaps_datarbrcrdr?r?r@�memory_full_infos
zProcess.memory_full_infocCsTdd�}|��}|sgS|�d�}g}|�d�}|g}|||�D�]\}}|�dd�}z|\}	}
}}}
}Wn*tk
r�|dg\}	}
}}}
}YnX|s�d}n2tr�t|�}|��}|�d	�r�t|�s�|dd
�}|�	t|	�t|
�||�
dd�|�
dd�|�
d
d�|�
dd�|�
dd�|�
dd�|�
dd�|�
dd�|�
dd�|�
dd�f
�q@|S)aPReturn process's mapped memory regions as a list of named
            tuples. Fields are explained in 'man proc'; here is an updated
            (Apr 2012) version: http://goo.gl/fmebo

            /proc/{PID}/smaps does not exist on kernels < 2.6.14 or if
            CONFIG_MMU kernel configuration option is not enabled.
            c	ss�i}|D]�}|�dd�}|d�d�s@|��|fV|�|�qzt|d�d||d<Wqtk
r�|d�d�r�Yqntd|��YqXq|��|fVdS)N�rr�rr�sVmFlags:z#don't know how to interpret line %r)rxry�popr�r�r�r�)rG�
current_blockr�r�r�r?r?r@�
get_blocksEs�z'Process.memory_maps.<locals>.get_blocks�
rNr�r:z[anon]rrrssRss:sSize:sPss:s
Shared_Clean:s
Shared_Dirty:sPrivate_Clean:sPrivate_Dirty:sReferenced:s
Anonymous:sSwap:)r�rxr�r�r!rr�ryrr�r�)rr�r�rGr�Z
first_liner��headerZhfieldsr%Zperms�offsetZdevrr\r?r?r@�memory_maps<sP	

�
�









�
zProcess.memory_mapsc	Cs`ztd|j|jf�WSttfk
rZt|j�sDt|j|j��nt|j|j|j	��YnXdS)Nz	%s/%s/cwd)
rwrr�rr r�rr�rr�r�r?r?r@�cwd�s
zProcess.cwdsctxt_switches:\t(\d+)cCsL|��}|�|�}|s,td|j|jf��nt�t|d�t|d��SdS)Nz�'voluntary_ctxt_switches' and 'nonvoluntary_ctxt_switches'lines were not found in %s/%s/status; the kernel is probably older than 2.6.23rr)r�r�r�rr�rZpctxswr�)rZ	_ctxsw_rer�Zctxswr?r?r@�num_ctx_switches�s
���zProcess.num_ctx_switchessThreads:\t(\d+)cCs|��}t|�|�d�S�Nr)r�r�r�)rZ_num_threads_rer�r?r?r@�num_threads�szProcess.num_threadsc
Cs�t�d|j|jf�}|��g}d}|D]�}d|j|j|f}z$t|��}|����}W5QRXWntk
r�d}Yq*YnX||�	d�dd�}|�
d�}t|d�t}	t|d	�t}
t
�t|�|	|
�}|�|�q*|r�|��|S)
Nz
%s/%s/taskFz%s/%s/task/%s/statTr�r:r�r�r�)rvrrr��sortrr�r�rr�rxr�r�rZpthreadr�r�r�)rZ
thread_idsrj�
hit_enoentZ	thread_idr�r��str�r�r�rlr?r?r@�threads�s2�


zProcess.threadscCst�|j�Sr)rK�getpriorityr�r�r?r?r@�nice_get�szProcess.nice_getcCst�|j|�Sr)rK�setpriorityr�)rr�r?r?r@�nice_set�szProcess.nice_setcCst�|j�Sr)r�r4r�r�r?r?r@�cpu_affinity_get�szProcess.cpu_affinity_getsCpus_allowed_list:\t(\d+)-(\d+)cCsV|��}|�|�}|r@ttt|dd�t|dd�d��Stttt����SdS)Nrr)r�r�rr�r�r�r�)rZ_rer�r�r?r?r@�_get_eligible_cpus�s

*zProcess._get_eligible_cpusc
Cs�zt�|j|�Wn�ttfk
r�}zpt|t�s>|jtjkr�|��}t	t
tt����}|D]4}||krxtd||f��||kr\td||f��q\�W5d}~XYnXdS)Nz(invalid CPU number %r; choose between %sz0CPU number %r is not eligible; choose between %s)
r�Zproc_cpu_affinity_setr�r�r�rtr�rr��tupler�r�r�)rr�r�Z
eligible_cpusZall_cpusZcpur?r?r@�cpu_affinity_set�s*����zProcess.cpu_affinity_setcCs,t�|j�\}}tdk	r t|�}t�||�Sr)r�r3r��enumr;rZpionice�rZioclassr�r?r?r@�
ionice_get�szProcess.ionice_getcCsP|dkrd}|r(|ttfkr(td|��|dks8|dkr@td��t�|j||�S)Nrz%r ioclass accepts no valuer9zvalue not in 0-7 range)r'r$r�r�Zproc_ioprio_setr�r�r?r?r@�
ionice_set�szProcess.ionice_setc
Cs�|jdkrtd��zD|dkr*t|j|�WSt|�dkrFtdt|���t|j||�WnNtk
r�}z0|jtjkr�t|j�r�t	|j|j
|j��n�W5d}~XYnXdS)Nrz)can't use prlimit() against PID 0 processr:z4second argument must be a (soft, hard) tuple, got %s)r�r�r�r�r=r�r�ZENOSYSr�rr�r�)rr�r�r�r?r?r@�rlimits 
��zProcess.rlimitcCs$|��d}tr|��}t�|d�S)Nr7�?)r�r!r�
PROC_STATUSESr�)rZletterr?r?r@r7szProcess.statusc
Cs^g}t�d|j|jf�}d}|D�]&}d|j|j|f}zt|�}WnVttfk
rfd}Yq"Yq"tk
r�}z|jtj	kr�WY�q"�W5d}~XYq"X|�
d�r"t|�r"d|j|j|f}zBt|��0}t
|����d�}	t
|����dd�}
W5QRXWntk
�rd}Yq"Xt|
�}t|t
|�t
|	�||
�}|�|�q"|�rZ|��|S)	NrFrTr�z%s/%s/fdinfo/%srr�)rvrrr�rwrr r�r�rr�rrr�r�rxr�r[r�r�)
rrjrar�r]r1r\r�r��posr_r^rlr?r?r@�
open_files&sL
�
$
�zProcess.open_filesrcCst�||j�}|��|Sr)rBr?r�r�)rr>r�r?r?r@�connectionsRszProcess.connectionscCstt�d|j|jf��S)Nr)r�rvrrr�r�r?r?r@�num_fdsXszProcess.num_fdscCst|��d�S)Nr�r�r�r?r?r@r�\szProcess.ppidsUid:\t(\d+)\t(\d+)\t(\d+)cCs6|��}|�|�d\}}}t�t|�t|�t|��Sr�)r�r�rZpuidsr�)rZ_uids_rer��real�	effective�savedr?r?r@�uids`szProcess.uidssGid:\t(\d+)\t(\d+)\t(\d+)cCs6|��}|�|�d\}}}t�t|�t|�t|��Sr�)r�r�rZpgidsr�)rZ_gids_rer�r�r�r�r?r?r@�gidsfszProcess.gids)N)N)r)8r<r=r>r@�	__slots__r
r�r�rr�r�r�r�r�r�r�r�r�r�rvr\r��getpidr�r�r�r�r�r��	HAS_SMAPSr�r�r�r�r�r�r�r�r�r��HAS_CPU_AFFINITYr�r�r��HAS_PROC_IO_PRIORITYr�r�r�r�r7r�r�r�r�r�r�r?r?r?r@r�6s�!



	

	



�
C

�




�




	


+

r�)N)r)F)F)�r@Z
__future__rr!rvr�r�r�rvr�rr"�sys�	tracebackr�rrr:rrrr�r	rKr
rrr
rrrrrrrrrrrrrrZ_compatrrrrr r!�version_infor�Z__extra__all__r�r\r�r�r��hasattrr�r�r�r�r�r�Zgetpagesizer�r�r,�	byteorderr rcZ	AF_PACKETr9�IntEnumr�r8r$r%r&r'r;�globalsr�__members__ZSTATUS_RUNNINGZSTATUS_SLEEPINGZSTATUS_DISK_SLEEPZSTATUS_STOPPEDZSTATUS_TRACING_STOPZ
STATUS_ZOMBIEZSTATUS_DEADZSTATUS_WAKE_KILLZ
STATUS_WAKINGZSTATUS_IDLEZ
STATUS_PARKEDr�r(r)r*r+r,r-r.r/r0r1r2r/rMrYr[r`r�rarer�rhrjrkrwr�r�r�r��	Exception�	print_excr�r��resource�ImportErrorr�ZCDLLr�rw�dirr�r�r�r�r�r�r�r�r�Znet_if_addrsr�r�rBrCrIrMZ
disk_usagererir�r�r�r�r�rr�r�r�r�r?r?r?r@�<module>s�
�





�
��
�����
������




�	4z:*
�
 

k
%
_
+q ^