3 \ ã @ s> d dl Z d dlZd dlZddlmZ dgZG dd„ deƒZdS )é Né )ÚutilÚPopenc @ sH e Zd ZdZdd„ Zdd„ Zejfdd„Zdd d „Z dd„ Z d d„ ZdS )r Úforkc C s t jƒ d | _| j|ƒ d S )N)r Z_flush_std_streamsÚ returncodeÚ_launch)ÚselfÚprocess_obj© r ú2/usr/lib64/python3.6/multiprocessing/popen_fork.pyÚ__init__ s zPopen.__init__c C s |S )Nr )r Úfdr r r Úduplicate_for_child s zPopen.duplicate_for_childc C s€ | j d krzx>ytj| j|ƒ\}}W n tk rB } zd S d }~X qX P qW || jkrztj|ƒrntj|ƒ | _ ntj|ƒ| _ | j S )N)r ÚosÚwaitpidÚpidÚOSErrorÚWIFSIGNALEDÚWTERMSIGÚWEXITSTATUS)r Úflagr ÚstsÚer r r Úpoll s z Popen.pollNc C sN | j d krH|d k r0ddlm} || jg|ƒs0d S | j|dkrBtjndƒS | j S )Nr )Úwaitg )r Zmultiprocessing.connectionr Úsentinelr r ÚWNOHANG)r Útimeoutr r r r r + s z Popen.waitc C s\ | j d krXytj| jtjƒ W n8 tk r2 Y n& tk rV | jdd�d krR‚ Y nX d S )Ngš™™™™™¹?)r ) r r Úkillr ÚsignalÚSIGTERMÚProcessLookupErrorr r )r r r r Ú terminate5 s zPopen.terminatec C sŠ d}t jƒ \}}t jƒ | _| jdkrdz0t j|ƒ dtjkrJdd l}|jƒ |j ƒ }W d t j |ƒ X n"t j|ƒ tj| t j|fƒ || _ d S )Nr r Úrandom)r Úpiper r ÚcloseÚsysÚmodulesr# ZseedÚ _bootstrapÚ_exitr ZFinalizer )r r ÚcodeZparent_rZchild_wr# r r r r ? s z Popen._launch)N)Ú__name__Ú __module__Ú__qualname__Úmethodr r r r r r r" r r r r r r s )r r&