o
    éT•jI	  ã                   @   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   Ú_flush_std_streamsÚ
returncodeÚ	finalizerÚ_launch)ÚselfÚprocess_obj© r   ú1/usr/lib/python3.10/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 r&zt | j|¡\}}W n
 ty   Y d S w || jkr&t |¡| _ | j S r   )r   ÚosÚwaitpidÚpidÚOSErrorÚwaitstatus_to_exitcode)r   Úflagr   Ústsr   r   r   Úpoll   s   
ý
z
Popen.pollNc                 C   sP   | j d u r%|d urddlm} || jg|ƒsd S |  |dkr"tj¡S d¡S | j S )Nr   )Úwaitg        )r   Úmultiprocessing.connectionr   Úsentinelr   r   ÚWNOHANG)r   Útimeoutr   r   r   r   r   $   s   
z
Popen.waitc                 C   s\   | j d u r,z
t | j|¡ W d S  ty   Y d S  ty+   | jdd�d u r(‚ Y d S w d S )Ngš™™™™™¹?)r   )r   r   Úkillr   ÚProcessLookupErrorr   r   )r   Úsigr   r   r   Ú_send_signal.   s   
ÿÿûzPopen._send_signalc                 C   ó   |   tj¡ d S r   )r"   ÚsignalÚSIGTERM©r   r   r   r   Ú	terminate8   ó   zPopen.terminatec                 C   r#   r   )r"   r$   ÚSIGKILLr&   r   r   r   r   ;   r(   z
Popen.killc              	   C   s¢   d}t  ¡ \}}t  ¡ \}}t  ¡ | _| jdkr7zt  |¡ t  |¡ |j|d�}W t  |¡ d S t  |¡ w t  |¡ t  |¡ t | tj	||f¡| _
|| _d S )Nr   r   )Úparent_sentinel)r   Úpiper   r   ÚcloseÚ
_bootstrapÚ_exitr   ÚFinalizeÚ	close_fdsr	   r   )r   r   ÚcodeÚparent_rÚchild_wÚchild_rÚparent_wr   r   r   r
   >   s    






ÿ
zPopen._launchc                 C   s   | j d ur|   ¡  d S d S r   )r	   r&   r   r   r   r,   Q   s   
ÿzPopen.closer   )Ú__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
    