U
    çÑÙg
  ã                   @   s6   d dl Z d dlZddlmZ dgZG dd„ deƒZdS )é    Né   )ÚutilÚPopenc                   @   s`   e Zd ZdZdd„ Zdd„ Zejfdd„Zdd	d
„Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )r   Úforkc                 C   s"   t  ¡  d | _d | _|  |¡ d S ©N)r   Z_flush_std_streamsÚ
returncodeÚ	finalizerÚ_launch)ÚselfÚprocess_obj© r   ú0/usr/lib/python3.8/multiprocessing/popen_fork.pyÚ__init__   s    zPopen.__init__c                 C   s   |S r   r   )r
   Úfdr   r   r   Úduplicate_for_child   s    zPopen.duplicate_for_childc              
   C   s˜   | j d kr’zt | j|¡\}}W n( tk
rH } z
W Y ¢d S d }~X Y nX || jkr’t |¡rnt |¡ | _ n$t |¡s†td 	|¡ƒ‚t 
|¡| _ | j S )NzStatus is {:n})r   ÚosÚwaitpidÚpidÚOSErrorÚWIFSIGNALEDÚWTERMSIGÚ	WIFEXITEDÚAssertionErrorÚformatÚWEXITSTATUS)r
   Úflagr   ÚstsÚer   r   r   Úpoll   s    


z
Popen.pollNc                 C   sN   | j d krH|d k	r0ddlm} || jg|ƒs0d S |  |dkrBtjnd¡S | j S )Nr   )Úwaitg        )r   Zmultiprocessing.connectionr   Úsentinelr   r   ÚWNOHANG)r
   Útimeoutr   r   r   r   r   (   s    
z
Popen.waitc                 C   sZ   | j d krVzt | j|¡ W n8 tk
r0   Y n& tk
rT   | jddd krP‚ Y nX d S )Ngš™™™™™¹?)r"   )r   r   Úkillr   ÚProcessLookupErrorr   r   )r
   Zsigr   r   r   Ú_send_signal2   s    
zPopen._send_signalc                 C   s   |   tj¡ d S r   )r%   ÚsignalÚSIGTERM©r
   r   r   r   Ú	terminate<   s    zPopen.terminatec                 C   s   |   tj¡ d S r   )r%   r&   ÚSIGKILLr(   r   r   r   r#   ?   s    z
Popen.killc              	   C   s˜   d}t  ¡ \}}t  ¡ \}}t  ¡ | _| jdkrdz$t  |¡ t  |¡ |j|d}W 5 t  |¡ X n0t  |¡ t  |¡ t | tj	||f¡| _
|| _d S )Nr   r   )Zparent_sentinel)r   Úpiper   r   Ú_exitÚcloseÚ
_bootstrapr   ZFinalizeZ	close_fdsr   r    )r
   r   ÚcodeZparent_rZchild_wZchild_rZparent_wr   r   r   r	   B   s     






ÿzPopen._launchc                 C   s   | j d k	r|   ¡  d S r   )r   r(   r   r   r   r-   U   s    
zPopen.close)N)Ú__name__Ú
__module__Ú__qualname__Úmethodr   r   r   r!   r   r   r%   r)   r#   r	   r-   r   r   r   r   r      s   


)r   r&   Ú r   Ú__all__Úobjectr   r   r   r   r   Ú<module>   s   