ó
Gq]c           @   sÞ   d  Z  d d l Z d d l Z d d l Z d d l Z d d l Z d d l m Z d d l m Z d d l m	 Z	 d d l
 m Z d d l
 m Z d	 d
 d d g Z d Z d „  Z d d d „ Z d „  Z e d „  ƒ Z d S(   s%   Routines common to all posix systems.iÿÿÿÿNi   (   t   memoize(   t
   sdiskusage(   t   usage_percent(   t   PY3(   t   unicodet
   pid_existst   wait_pidt
   disk_usaget   get_terminal_mapc         C   st   |  d k r t  Sy t j |  d ƒ WnE t k
 rk } | j t j k rL t S| j t j k rb t  S| ‚ n Xt  Sd S(   s6   Check whether pid exists in the current process table.i    N(   t   Truet   ost   killt   OSErrort   errnot   ESRCHt   Falset   EPERM(   t   pidt   err(    (    s.   lib/python2.7/site-packages/psutil/_psposix.pyR      s    
c   	         sy  ‡  ‡ ‡ ‡ ‡ f d †  } t  t d t j ƒ ‰ ˆ d k	 r[ ‡  f d †  } ˆ ƒ  ˆ ‰ n ‡  f d †  } d } xt rty | ƒ  \ } } Wn{ t k
 r	} | j t j k rÂ | | ƒ } qs qq| j t j k rx/ t rÿ t ˆ  ƒ rø | | ƒ } q× d Sq× Wqq‚  qs X| d k r(| | ƒ } qs n  t	 j
 | ƒ rEt	 j | ƒ St	 j | ƒ rat	 j | ƒ St d | ƒ ‚ qs Wd S(	   sI  Wait for process with pid 'pid' to terminate and return its
    exit status code as an integer.

    If pid is not a children of os.getpid() (current process) just
    waits until the process disappears and return None.

    If pid does not exist at all return None immediately.

    Raise TimeoutExpired on timeout expired.
    c            sW   ˆ d  k	 r9 ˆ ƒ  ˆ k r9 t ˆ d ˆ  d ˆ ƒ‚ q9 n  t j |  ƒ t |  d d ƒ S(   NR   t   namei   g{®Gáz¤?(   t   Nonet   TimeoutExpiredt   timet   sleept   min(   t   delay(   R   t	   proc_namet   stop_att   timeoutt   timer(    s.   lib/python2.7/site-packages/psutil/_psposix.pyt   check_timeoutC   s
    t	   monotonicc              s   t  j ˆ  t  j ƒ S(   N(   R
   t   waitpidt   WNOHANG(    (   R   (    s.   lib/python2.7/site-packages/psutil/_psposix.pyt   waitcallL   s    c              s   t  j ˆ  d ƒ S(   Ni    (   R
   R    (    (   R   (    s.   lib/python2.7/site-packages/psutil/_psposix.pyR"   P   s    g-Cëâ6?Ni    s   unknown process exit status %r(   t   getattrR   R   R	   R   R   t   EINTRt   ECHILDR   R
   t   WIFSIGNALEDt   WTERMSIGt	   WIFEXITEDt   WEXITSTATUSt
   ValueError(	   R   R   R   R   R"   R   t   retpidt   statusR   (    (   R   R   R   R   R   s.   lib/python2.7/site-packages/psutil/_psposix.pyR   8   s8    		c      	   C   s  t  r t j |  ƒ } nx y t j |  ƒ } Wnb t k
 r t |  t ƒ r‰ y |  j t j ƒ  ƒ }  Wn t k
 rv n Xt j |  ƒ } q ‚  n X| j	 | j
 } | j | j
 } | j | j
 } | | } | | } t | | d d ƒ} t d | d | d | d | ƒ S(   s.  Return disk usage associated with path.
    Note: UNIX usually reserves 5% disk space which is not accessible
    by user. In this function "total" and "used" values reflect the
    total and used disk space whereas "free" and "percent" represent
    the "free" and "used percent" user disk space.
    t   round_i   t   totalt   usedt   freet   percent(   R   R
   t   statvfst   UnicodeEncodeErrort
   isinstanceR   t   encodet   syst   getfilesystemencodingt   f_blockst   f_frsizet   f_bfreet   f_bavailR   R   (   t   patht   stR.   t   avail_to_roott   avail_to_userR/   t
   total_usert   usage_percent_user(    (    s.   lib/python2.7/site-packages/psutil/_psposix.pyR   {   s(    

c          C   s—   i  }  t  j  d ƒ t  j  d ƒ } xn | D]f } | |  k sG t | ƒ ‚ y | |  t j | ƒ j <Wq) t k
 rŽ } | j t j k r ‚  q q) Xq) W|  S(   sM   Get a map of device-id -> path as a dict.
    Used by Process.terminal()
    s	   /dev/tty*s
   /dev/pts/*(   t   globt   AssertionErrorR
   t   statt   st_rdevR   R   t   ENOENT(   t   rett   lsR   R   (    (    s.   lib/python2.7/site-packages/psutil/_psposix.pyR   ¬   s    (   t   __doc__R   RB   R
   R6   R   t   _commonR    R   R   t   _compatR   R   t   __all__R   R   R   R   R   R   (    (    (    s.   lib/python2.7/site-packages/psutil/_psposix.pyt   <module>   s    	C	1