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 krˆx>ytj| j|ƒ\}}W n tk
rB } zd S d }~X qX P qW || jkrˆtj|ƒrntj|ƒ | _ ntj|ƒs|t‚tj |ƒ| _ | j S )N)
r ÚosÚwaitpidÚpidÚOSErrorÚWIFSIGNALEDÚWTERMSIGÚ WIFEXITEDÚAssertionErrorÚ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( r! Ú r Ú__all__Úobjectr r
r
r
r Ú