Your IP : 216.73.217.77


Current Path : /lib/fm-agent/dependencies/psutil/__pycache__/
Upload File :
Current File : //lib/fm-agent/dependencies/psutil/__pycache__/_pslinux.cpython-36.pyc

3

q��iɨ�@s�dZddlmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZddlm
Z
ddlmZmZmZddlmZmZmZmZmZddlZddlZdd	d
ddd
dddddddddddgZeed�Ze�rx$ee�D]Zej d�r�ej!e�q�Wej"d�Z#ej"d�Z$da%e	j&�Z'dZ(dZ)dZ*dZ+ej,ej-ej.ej/ej0ej1ej2ej2ej3ej4d �
Z5ej6ej7ej8ej9ej:ej;ej<ej=ej>ej?ej@d!�ZAdZBdZCdZDd"d#�ZEed$eE��ZFed%d&d'd(d)d*d+d,d-d.g	�ZGed/d0�ZHed1d2d3d4d5d6d7d8d9d:d;d<g�ZIed=d>d?jJeIjK��ZLd@dA�ZMdBdC�ZNedDdE�dFd��ZOedGdE�dHd��ZPdIdJ�ZQdKdL�ZRdMdN�ZSdOdP�ZTdQdR�ZUdSdT�ZVdUdV�ZWdWdX�ZXGdYdZ�dZ�ZYeY�ZZdid\d]�Z[d^d_�Z\d`da�Z]djdcdd�Z^e
j_Z_dedf�Z`Gdgdh�dhea�ZbdS)kzLinux platform implementation.�)�divisionN)�_common)�_psposix)�
isfile_strict�
usage_percent�
deprecated)�PY3�
namedtuple�wraps�b�defaultdict�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_CLOSING�phymem_buffers�
cached_phymem�
linux_prlimitZRLIM�
SC_CLK_TCK�SC_PAGE_SIZE���)
�R�S�D�T�t�Z�X�x�K�W)Z01Z02Z03Z04Z05Z06Z07Z08Z09Z0AZ0BcCs�tdd�}z|j�j�dd�}Wd|j�Xddddd	d
dg}t|�}|dkrZ|jd
�|dkrl|jd�|dkr~|jd�|S)z�Return 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]]])
    z
/proc/stat�rbr!N�user�nice�system�idleZiowaitZirqZsoftirq�Zsteal�	Zguest�
Z
guest_nice)�open�readline�split�close�len�append)�f�values�fieldsZvlen�r?�1/usr/lib/fm-agent/dependencies/psutil/_pslinux.py�_get_cputimes_fieldscs




rA�	scputimes�svmem�totalZ	available�percent�used�free�active�inactive�buffers�cached�pextmemz"rss vms shared text lib data dirty�
pmmap_grouped�path�rss�sizeZpssZshared_cleanZshared_dirtyZ
private_cleanZ
private_dirtyZ
referencedZ	anonymous�swap�	pmmap_extzaddr perms � cCs6tj�\}}}}}}d}}}tdd�}td�td�td�}	}
}z�x�|D]|}|j|	�rrt|j�d�d}n>|j|
�r�t|j�d�d}n|j|�r�t|j�d�d}|dk	rN|dk	rN|dk	rNPqNWd}
tj|
t	�d	}}}Wd|j
�X|||}||}t|||dd
�}t|||||||||�	S)Nz
/proc/meminfor.zCached:zActive:z	Inactive:r!izW'cached', 'active' and 'inactive' memory stats couldn't be determined and were set to 0r)�_round)
�cext�
linux_sysinfor6r�
startswith�intr8�warnings�warn�RuntimeWarningr9rrC)rDrGrJ�shared�_rKrHrIr<ZCACHEDZACTIVEZINACTIVE�line�msgZavailrFrEr?r?r@�virtual_memory�s2





r`cCs�tj�\}}}}}}||}t||dd�}tdd�}td�td�}}d}}	z�x�|D]h}
|
j|�r�t|
jtd��d�dd	}n(|
j|�r�t|
jtd��d�dd	}	|dk	rV|	dk	rVPqVWd
}tj	|t
�d}}	Wd|j�Xtj
||||||	�S)Nr!)rTz/proc/vmstatr.ZpswpinZpswpoutrS�izK'sin' and 'sout' swap memory stats couldn't be determined and were set to 0r)rUrVrr6rrWrXr8rYrZr[r9r�sswap)r]rDrGrFrEr<ZSINZSOUT�sin�soutr^r_r?r?r@�swap_memory�s&


 

rezpsutil.virtual_memory().cached)�replacementcCst�jS)N)r`rKr?r?r?r@r�szpsutil.virtual_memory().bufferscCst�jS)N)r`rJr?r?r?r@r�scCsRtdd�}z|j�j�}Wd|j�X|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.
    z
/proc/statr.Nr!cSsg|]}t|�t�qSr?)�float�CLOCK_TICKS)�.0r+r?r?r@�
<listcomp>�szcpu_times.<locals>.<listcomp>)r6r7r8r9r:rB�_fields)r<r=r>r?r?r@�	cpu_times�s

rlcCs�g}tdd�}zj|j�td�}xT|D]L}|j|�r&|j�}|dttj�d�}dd�|D�}t|�}|j|�q&W|S|j	�XdS)zfReturn a list of namedtuple representing the CPU times
    for every CPU available on the system.
    z
/proc/statr.�cpur!cSsg|]}t|�t�qSr?)rgrh)rir+r?r?r@rj�sz!per_cpu_times.<locals>.<listcomp>N)
r6r7rrWr8r:rBrkr;r9)�cpusr<ZCPUr^r=r>�entryr?r?r@�
per_cpu_times�s


rpcCs�y
tjd�Stk
rpd}tdd�}z|j�}Wd|j�Xtd�}x"|D]}|j�j|�rN|d7}qNWYnX|dkr�tdd	�}z|j�}Wd|j�Xt	j
d
�}x,|D]$}|jd�d}|j|�r�|d7}q�W|dkr�dS|S)z0Return the number of logical CPUs in the system.�SC_NPROCESSORS_ONLNrz
/proc/cpuinfor.N�	processorr!z
/proc/stat�rtzcpu\drS)
�os�sysconf�
ValueErrorr6�	readlinesr9r�lowerrW�re�compiler8�match)�numr<�linesZ	PROCESSORr^�searchr?r?r@�cpu_count_logicals2








rcCsntdd�}z|j�}Wd|j�Xt�}td�}x(|D] }|j�j|�r6|j|j��q6W|rft	|�SdSdS)z1Return the number of physical CPUs in the system.z
/proc/cpuinfor.Nzphysical id)
r6rwr9�setrrxrW�add�stripr:)r<r}�foundZPHYSICAL_IDr^r?r?r@�cpu_count_physical&s


r�c	Cs\g}tj�}xJ|D]B}|\}}}}}|s*q|dkr6d}tj||pBd||�}|j|�qW|S)z:Return currently connected users as a list of namedtuples.z:0.0�	localhostN)rU�usersr�suserr;)	�retlistZrawlist�itemr/Ztty�hostnameZtstampZuser_process�ntr?r?r@r�:s
r�c
Csbtdd�}zHtd�}x2|D]*}|j|�rt|j�j�d�}|a|SqWtd��Wd|j�XdS)zAReturn the system boot time expressed in seconds since the epoch.z
/proc/statr.Zbtimer!zline 'btime' not foundN)	r6rrWrgr�r8�	BOOT_TIME�RuntimeErrorr9)r<ZBTIMEr^�retr?r?r@�	boot_timeLs


r�cCsdd�tjtd��D�S)z7Returns a list of PIDs currently running on the system.cSsg|]}|j�rt|��qSr?)�isdigitrX)rir+r?r?r@rj`szpids.<locals>.<listcomp>z/proc)rt�listdirrr?r?r?r@�pids^sr�cCs
tj|�S)z&Check For the existence of a unix pid.)r�
pid_exists)�pidr?r?r@r�csr�c@sNeZdZdZdd�Zdd�Zdd�Zdd	�Zddd�Zdd
d�Z	ddd�Z
d
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�|_dS)N�tcp�tcp6�udp�udp6�unix)�allr��tcp4r�r��udp4r�r��inet�inet4�inet6)�socket�AF_INET�SOCK_STREAM�AF_INET6�
SOCK_DGRAM�AF_UNIX�tmap)�selfr�r�r�r�r�r?r?r@�__init__vs 
zConnections.__init__c
Cs�tt�}xxtjd|�D]f}ytjd||f�}Wntk
rHwYqX|jd�r|dd�dd�}||j|t|�f�qW|S)Nz/proc/%s/fdz/proc/%s/fd/%szsocket:[r3r!���)	r�listrtr��readlink�OSErrorrWr;rX)r�r��inodes�fd�inoder?r?r@�get_proc_inodes�s
zConnections.get_proc_inodescCsji}x`t�D]V}y|j|j|��Wqtk
r`tj�d}|jtjtjtj	tj
fkr\�YqXqW|S)Nr!)r��updater�r��sys�exc_info�errno�ENOENT�ESRCH�EPERM�EACCES)r�r�r��errr?r?r@�get_all_inodes�szConnections.get_all_inodescCs�|jd�\}}t|d�}|s fStr.|jd�}|tjkrttjdkr`tj|t	j
|�ddd	��}q�tj|t	j
|��}nVt	j
|�}tjdkr�tjtjtj
d
tjd|����}n tjtjtj
dtjd|����}||fS)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
        �:��ascii�littleNr!�>4I�<4Ir�)r�)r�)r8rXr�encoder�r�r��	byteorder�	inet_ntop�base64�	b16decoder��struct�pack�unpack)r��addr�family�ip�portr?r?r@�decode_address�s&





zConnections.decode_addressNccs
|jd�rtjj|�rdSt|d�}|j�x�|D]�}|j�dd�\
}}	}
}}}}}}}||kr�t||�dkr�|tj	kr�t
d��||d\}
}nd	\}
}|dk	r�||
kr�q4q4|tjkr�t|}nt
j}|j|	|�}	|j|
|�}
||||	|
||
fVq4W|j�dS)
z.Parse /proc/net/tcp* and /proc/net/udp* files.�6Nrsr5r!z,ambiguos inode with multiple PIDs referencesrr�)Nr�)�endswithrtrN�existsr6r7r8r:r�r�rvr��TCP_STATUSESr�	CONN_NONEr�r9)r��filer��type_r��
filter_pidr<r^r]�laddr�raddr�statusr�r�r�r?r?r@�process_inet�s(

$

zConnections.process_inetc	cs�t|d�}|j�x�|D]�}|j�}|dd�\}}}}}	}}
|
|krP||
}nd	g}xd|D]\\}}
|dk	rx||krxq\q\t|�dkr�|d
}nd}t|	�}	d}tj}|
||	||||fVq\WqW|j�dS)zParse /proc/net/unix files.rsr�Nr!r3�r�)Nr�r�)r6r7r8r:rXrr�r9)r�r�r�r�r�r<r^�tokensr]r�r��pairsr�r�rNr�r�r?r?r@�process_unix�s&



zConnections.process_unixc
Cs||jkr,td|djdd�|jD��f��|dk	rH|j|�}|sPgSn|j�}g}x�|j|D]�\}}}|tjtjfkr�|jd|||||d�}n|j	d||||d�}xT|D]L\}	}}}
}}}
|r�t
j|	|||
||�}nt
j|	|||
|||
�}|j
|�q�Wq`W|S)Nz+invalid %r kind argument; choose between %sz, cSsg|]}t|��qSr?)�repr)rir+r?r?r@rjsz(Connections.retrieve.<locals>.<listcomp>z/proc/net/%s)r�)r�rv�joinr�r�r�r�r�r�r�r�pconn�sconnr;)r��kindr�r�r�r<r�r��lsr�r�r�r�Z	bound_pid�connr?r?r@�retrieves.

zConnections.retrieve)N)N)N)�__name__�
__module__�__qualname__�__doc__r�r�r�r�r�r�r�r?r?r?r@r�js
/
 
r�r�cCs
tj|�S)z$Return system-wide open connections.)�_connectionsr�)r�r?r?r@�net_connections7sr�cCs�tdd�}z|j�}Wd|j�Xi}x�|dd�D]�}|jd�}|dksVtt|���|d|�j�}||dd�j�j�}t|d�}t|d�}t|d�}	t|d�}
t|d	�}t|d
�}t|d�}
t|d�}|||||	|
|
|f||<q4W|S)
zsReturn network I/O statistics for every network interface
    installed on the system as a dict of raw tuples.
    z
/proc/net/devrsNr"r�rr!r#r3r4r5�)	r6rwr9�rfind�AssertionErrorr�r�r8rX)r<r}�retdictr^Zcolon�namer>�
bytes_recv�packets_recv�errin�dropin�
bytes_sent�packets_sent�errout�dropoutr?r?r@�net_io_counters<s*


r�cCsjd}g}tdd�}z|j�dd�}Wd|j�XxXt|�D]L}|j�\}}}}|dj�rh|j|�q<|s~|dj|�r<|j|�q<Wi}tdd�}z|j�}Wd|j�Xx�|D]�}|j�}t|�dkr�|dd	�\}}}}	}}
}}}}
}n|\}}}}	}
}}
d
\}}||kr�t	|
�|}
t	|
�|}
t	|	�}	t	|�}t	|�}t	|�}|	||
|
||f||<q�W|S)zcReturn disk I/O statistics for every disk installed on the
    system as a dict of raw tuples.
    iz/proc/partitionsrsr"Nr!z/proc/diskstatsr�r�rr�r�)rr)
r6rwr9�reversedr8r�r;rWr:rX)ZSECTOR_SIZE�
partitionsr<r}r^r]r�r�r>Zreads�rbytesZrtimeZwrites�wbytesZwtimer?r?r@�disk_io_counters[s@




$rFcCs�g}tdd�}z*x$|D]}|jd�s|j|j��qWWd|j�Xg}tj�}xT|D]L}|\}}}	}
|dkrrd}|s�|dksV|	|kr�qVtj|||	|
�}|j|�qVW|S)z6Return mounted disk partitions as a list of nameduplesz/proc/filesystems�rZnodevNZnoner�)	r6rWr;r�r9rU�disk_partitionsr�	sdiskpart)r�Zphydevsr<r^r�r��	partition�device�
mountpoint�fstype�opts�ntupler?r?r@r�s&




rcst���fdd��}|S)zlDecorator which translates bare OSError and IOError exceptions
    into NoSuchProcess and AccessDenied.
    cs�y�|f|�|�Stk
r�tdks0tdkr2�tj�d}|jtjtjfkr^t|j|j	��|jtj
tjfkr~t|j|j	���YnXdS)Nr!)�EnvironmentError�
NoSuchProcess�AccessDeniedr�r�r�r�r�r��_namer�r�)r��args�kwargsr�)�funr?r@�wrapper�sz wrap_exceptions.<locals>.wrapper)r
)rrr?)rr@�wrap_exceptions�src@s�eZdZdZddgZdd�Zedd��Zdd	�Zed
d��Z	edd
��Z
ejj
dej��rjedd��Zndd�Zedd��ZedGdd��Zedd��Zedd��Zedd��Zejj
dej��r�dd�Znd d�Zed!d"��Zed#d$��Zed%d&��Zed'd(��Zed)d*��Zed+d,��Zed-d.��Zed/d0��Zeed1��rZed2d3��Z ed4d5��Z!e"�rnedHd6d7��Z#ed8d9��Z$ed:d;��Z%edId=d>��Z&ed?d@��Z'edAdB��Z(edCdD��Z)edEdF��Z*dS)J�ProcesszLinux process implementation.r�r
cCs||_d|_dS)N)r�r
)r�r�r?r?r@r��szProcess.__init__c
Cs^d|j}trt|dtd�}n
t|d�}z&|j�jd�djdd�jdd�}Wd|j�X|S)	Nz
/proc/%s/statrs)�encodingrSr!�(r��))r�rr6�DEFAULT_ENCODING�readr8�replacer9)r��fnamer<r�r?r?r@r��s

&
zProcess.namecCs�ytjd|j�}Wn|ttfk
r�tj�d}|jtjtj	fkrjtj
jd|j�r\dSt|j|j
��|jtjtjfkr�t|j|j
���YnX|jd�d}|jd�r�tj
j|�r�|dd	�}|S)
Nz/proc/%s/exer!z/proc/%sr��rz
 (deleted)r5i����)rtr�r�r��IOErrorr�r�r�r�r�rN�lexistsrr
r�r�rr8r�r�)r��exer�r?r?r@r�szProcess.exec
CsPd|j}trt|dtd�}n
t|d�}zdd�|j�jd�D�S|j�XdS)Nz/proc/%s/cmdliners)rcSsg|]}|r|�qSr?r?)rir+r?r?r@rjsz#Process.cmdline.<locals>.<listcomp>r)r�rr6rrr8r9)r�rr<r?r?r@�cmdline�s

zProcess.cmdlinecCsdtj�}td|jd�}zt|j�jtd��d�}Wd|j�Xy||St	k
r^dSXdS)Nz
/proc/%s/statr.rS�)
rZ_get_terminal_mapr6r�rXrr8rr9�KeyError)r�r�r<Ztty_nrr?r?r@�terminal
s
zProcess.terminalz/proc/%s/ioc
Cs.d|j}t|d�}td�td�}}td�td�}}z�d}}}	}
x�|D]�}|dkrx|j|�rxt|j�d�}qP|dkr�|j|�r�t|j�d�}qP|	dkr�|j|�r�t|j�d�}	qP|
dkrP|j|�rPt|j�d�}
qPWx(|||	|
fD]}|dkr�td|��q�Wtj|||	|
�S|j	�XdS)	Nz/proc/%s/ior.ZsyscrZsyscw�
read_bytes�write_bytesr!z(couldn't read all necessary info from %r)
r�r6rrWrXr8�NotImplementedErrorr�pior9)
r�rr<ZSYSCRZSYSCWZ
READ_BYTESZWRITE_BYTESZrcountZwcountr�r�r^r+r?r?r@�io_counterss*


zProcess.io_counterscCstd|j��dS)Nz+couldn't find /proc/%s/io (kernel too old?))r%r�)r�r?r?r@r'1scCs�td|jd�}z|j�j�}Wd|j�X||jtd��dd�}|jtd��}t|d�t	}t|d�t	}t
j||�S)Nz
/proc/%s/statr.rr"rSr��)r6r�rr�r9�findrr8rgrhr�	pcputimes)r�r<�str=�utime�stimer?r?r@rl5s
zProcess.cpu_timesNcCsDytj|j|�Stjk
r>tdkr*�t||j|j��YnXdS)N)rZwait_pidr��TimeoutExpiredr
)r��timeoutr?r?r@�waitCszProcess.waitcCsrtd|jd�}z|j�j�}Wd|j�X||jtd��dd�}|jtd��}tp\t	�}t
|d�t|S)Nz
/proc/%s/statr.rr"rS�)r6r�rr�r9r�rr8r�r�rgrh)r�r<r+r=Zbtr?r?r@�create_timeMs

zProcess.create_timec
CsTtd|jd�}z4|j�j�dd�\}}tjt|�tt|�t�S|j�XdS)Nz/proc/%s/statmr.r")	r6r�r7r8r�pmemrX�PAGESIZEr9)r�r<�vmsrOr?r?r@�memory_info_szProcess.memory_infoc	Cs`td|jd�}z0dd�|j�j�dd�D�\}}}}}}}Wd|j�Xt|||||||�S)Nz/proc/%s/statmr.cSsg|]}t|�t�qSr?)rXr4)rir+r?r?r@rjysz*Process.memory_info_ex.<locals>.<listcomp>r�)r6r�r7r8r9rL)	r�r<r5rOr\�text�lib�dataZdirtyr?r?r@�memory_info_exis

0
zProcess.memory_info_exz/proc/%s/smapsc
#s�d��ytd|jd���j�}|g���fdd�}|�rx�|�D]�\}}|jdd�}y|\}}}}	}
}Wn*tk
r�|dg\}}}}	}
}YnX|s�d}n|j�}||||d	|jd
d�|jdd�|jd
d�|jdd�|jdd�|jdd�|jdd�|jdd�|jdd�f
VqBW�j�Wn�tk
�r��dk	�rF�j�t	j
�d}|jtjtj
fk�rtt|j|j��|jtjtjfk�r�t|j|j���Yn �dk	�r��j��YnX�j�dS)z�Return process's mapped memory regions as a list of nameduples.
            Fields are explained in 'man proc'; here is an updated (Apr 2012)
            version: http://goo.gl/fmebo
            Nz/proc/%s/smapsrsc3s�i}x��D]�}|jdd�}|djd�sB�j�|fV�j|�q
yt|d�d||d<Wq
tk
r�|djd�r�w
ntd|��Yq
Xq
W�j�|fVdS)N�rr�r!izVmFlags:z#don't know how to interpret line %r)r8r��popr;rXrvrW)r9r^r>)�
current_blockr<r?r@�
get_blocks�s
z'Process.memory_maps.<locals>.get_blocksr;r�z[anon]zRss:zSize:rzPss:z
Shared_Clean:z
Shared_Dirty:zPrivate_Clean:zPrivate_Dirty:zReferenced:z
Anonymous:zSwap:r!)r6r�r7r8rvr��getr9r
r�r�r�r�r�rr
r�r�r)
r��
first_liner>�headerr9Zhfieldsr��perms�offset�devr�rNr�r?)r=r<r@�memory_mapssT









zProcess.memory_mapscCsd|j}t|��dS)Nzfcouldn't find /proc/%s/smaps; kernel < 2.6.14 or CONFIG_MMU kernel configuration option is not enabled)r�r%)r�r_r?r?r@rE�scCstjd|j�}|jdd�S)Nz/proc/%s/cwdrr�)rtr�r�r)r�rNr?r?r@�cwd�szProcess.cwdc
Cs�d}}td|jd�}td�}td�}zrx^|D]V}|j|�rPt|j�d�}n|j|�rjt|j�d�}|dk	r0|dk	r0tj||�Sq0Wtd|j��Wd|j	�XdS)Nz/proc/%s/statusr.Zvoluntary_ctxt_switchesZnonvoluntary_ctxt_switchesr!z�'voluntary_ctxt_switches' and 'nonvoluntary_ctxt_switches'fields were not found in /proc/%s/status; the kernel is probably older than 2.6.23)
r6r�rrWrXr8r�pctxswr%r9)r�ZvolZunvolr<Z	VOLUNTARYZ
NON_VOLUNTARYr^r?r?r@�num_ctx_switches�s 


zProcess.num_ctx_switchesc
Cs\td|jd�}z<td�}x&|D]}|j|�r t|j�d�Sq Wtd��Wd|j�XdS)Nz/proc/%s/statusr.zThreads:r!zline not found)r6r�rrWrXr8r%r9)r�r<ZTHREADSr^r?r?r@�num_threads�s

zProcess.num_threadscCstjd|j�}|j�g}d}x�|D]�}ytd|j|fd�}Wn4tk
rvtj�d}|jtj	krpd}w&�YnXz|j
�j�}Wd|j�X||j
td��dd�}|jtd	��}t|d
�t}	t|d�t}
tjt|�|	|
�}|j|�q&W|�rtjd|j�|S)
Nz
/proc/%s/taskFz/proc/%s/task/%s/statr.r!Trr"rSr�r(z/proc/%s)rtr�r��sortr6r
r�r�r�r�rr�r9r)rr8rgrhr�pthreadrXr;�stat)r�Z
thread_idsr��
hit_enoentZ	thread_idr<r�r+r=r,r-r	r?r?r@�threads�s2

zProcess.threadscCstj|j�S)N)�
_psutil_posix�getpriorityr�)r�r?r?r@�nice_gets
zProcess.nice_getcCstj|j|�S)N)rO�setpriorityr�)r��valuer?r?r@�nice_set%szProcess.nice_setcCstj|j�S)N)rUZproc_cpu_affinity_getr�)r�r?r?r@�cpu_affinity_get)szProcess.cpu_affinity_getcCs~ytj|j|�Wnftk
rxtj�d}|jtjkrrtt	t
t����}x$|D]}||krRtd||f��qRW�YnXdS)Nr!z#invalid CPU #%i (choose between %s))
rUZproc_cpu_affinity_setr�r�r�r�r��EINVAL�tuple�ranger:rprv)r�rnr�Zallcpusrmr?r?r@�cpu_affinity_set-s
zProcess.cpu_affinity_set�proc_ioprio_getcCstj|j�\}}tj||�S)N)rUrZr�r�pionice)r��ioclassrSr?r?r@�
ionice_get>szProcess.ionice_getcCs�|tdfkr$|rd}t|��t}d}|ttfkr>|dkr`d}n"|tkr\|rVd}t|��d}nd}d|kordkns�td��tj|j||�S)Nz*can't specify value with IOPRIO_CLASS_NONErraz*can't specify value with IOPRIO_CLASS_IDLEr3z0value argument range expected is between 0 and 8)r
rvrrrrUZproc_ioprio_setr�)r�r\rSr_r?r?r@�
ionice_setCs&zProcess.ionice_setcCsZ|jdkrtd��|dkr(tj|j|�St|�dkr<td��|\}}tj|j|||�dS)Nrz)can't use prlimit() against PID 0 processr"z,second argument must be a (soft, hard) tuple)r�rvrUrr:)r��resource�limitsZsoftZhardr?r?r@�rlimit[s
zProcess.rlimitc
Cshtd|jd�}zHtd�}x:|D]2}|j|�r |j�d}trF|j�}tj|d�Sq WWd|j	�XdS)Nz/proc/%s/statusr.zState:r!�?)
r6r�rrWr8r�decode�
PROC_STATUSESr?r9)r�r<ZSTATEr^Zletterr?r?r@r�ls

zProcess.statusc
Cs�g}tjd|j�}d}x�|D]�}d|j|f}tjj|�rytj|�}Wn:tk
r�tj�d}|j	t	j
t	jfkr~d}w�YqX|jd�rt
|�rtj|t|��}|j|�qW|r�tjd|j�|S)Nz/proc/%s/fdFz/proc/%s/fd/%sr!T�/z/proc/%s)rtr�r�rN�islinkr�r�r�r�r�r�r�rWrr�	popenfilerXr;rL)r�r��filesrMr�r�r�r	r?r?r@�
open_files|s(
zProcess.open_filesr�cCs"tj||j�}tjd|j�|S)Nz/proc/%s)r�r�r�rtrL)r�r�r�r?r?r@�connections�szProcess.connectionscCsttjd|j��S)Nz/proc/%s/fd)r:rtr�r�)r�r?r?r@�num_fds�szProcess.num_fdsc
Cs\td|jd�}z<td�}x&|D]}|j|�r t|j�d�Sq Wtd��Wd|j�XdS)Nz/proc/%s/statusr.zPPid:r!zline not found)r6r�rrWrXr8r%r9)r�r<ZPPIDr^r?r?r@�ppid�s

zProcess.ppidc	Csxtd|jd�}zXtd�}xB|D]:}|j|�r |j�\}}}}}tjt|�t|�t|��Sq Wtd��Wd|j	�XdS)Nz/proc/%s/statusr.zUid:zline not found)
r6r�rrWr8r�puidsrXr%r9)	r�r<ZUIDr^r]�real�	effective�saved�fsr?r?r@�uids�s

zProcess.uidsc	Csxtd|jd�}zXtd�}xB|D]:}|j|�r |j�\}}}}}tjt|�t|�t|��Sq Wtd��Wd|j	�XdS)Nz/proc/%s/statusr.zGid:zline not found)
r6r�rrWr8r�pgidsrXr%r9)	r�r<ZGIDr^r]rnrorprqr?r?r@�gids�s

zProcess.gids)N)N)r�)+r�r�r�r��	__slots__r�rr�rrr"rtrNr��getpidr'rlr0r2r6r:rErFrHrIrNrQrTrUrY�hasattrrUr]r^�HAS_PRLIMITrar�rirjrkrlrrrtr?r?r?r@r�sR

	

J!

r)r�)F)cr��
__future__rr�r�rtryr�r�r�rY�psutilrr�psutil._commonrrr�psutil._compatrr	r
rr�
_psutil_linuxrUrO�__extra__all__rwrx�dirr�rWr;rurhr4r��getdefaultencodingrr
rrr�STATUS_RUNNING�STATUS_SLEEPING�STATUS_DISK_SLEEP�STATUS_STOPPED�STATUS_TRACING_STOP�
STATUS_ZOMBIE�STATUS_DEAD�STATUS_WAKE_KILL�
STATUS_WAKINGrdrrrrrrrrrrrr�rrr.rArBrCrLrMr�rkrRr`rerrrlrprr�r�r�r�r�r�r�r�r�rr�
disk_usager�objectrr?r?r?r@�<module>s�






!&K
9