a
    kxÛgI	  ã                   @   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.9/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   sR   | j d u rLzt | j|¡\}}W n ty4   Y d S 0 || jkrLt |¡| _ | j S r   )r   ÚosÚwaitpidÚpidÚOSErrorÚwaitstatus_to_exitcode)r
   Úflagr   Ústsr   r   r   Úpoll   s    

z
Popen.pollNc                 C   sN   | j d u rH|d u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   sV   | j d u rRzt | j|¡ W n4 ty.   Y n$ tyP   | jddd u rL‚ Y n0 d S )Ngš™™™™™¹?)r   )r   r   Úkillr   ÚProcessLookupErrorr   r   )r
   Zsigr   r   r   Ú_send_signal.   s    
zPopen._send_signalc                 C   s   |   tj¡ d S r   )r   ÚsignalÚSIGTERM©r
   r   r   r   Ú	terminate8   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rnz.t  |¡ t  |¡ |j|d}W t  |¡ qžt  |¡ 0 n0t  |¡ t  |¡ t | tj	||f¡| _
|| _d S )Nr   r   )Zparent_sentinel)r   Úpiper   r   ÚcloseÚ
_bootstrapÚ_exitr   ZFinalizeZ	close_fdsr   r   )r
   r   ÚcodeZparent_rZchild_wZchild_rZparent_wr   r   r   r	   >   s     






ÿzPopen._launchc                 C   s   | j d ur|   ¡  d S r   )r   r"   r   r   r   r&   Q   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   