a XC?h��@spddlZddlZddlmZmZddlmZddlmZddlmZdgZ Gdd �d e �Z Gd d�dej �Z dS) �N�)� reduction�set_spawning_popen)� popen_fork)�spawn)�util�Popenc@seZdZdd�Zdd�ZdS)�_DupFdcCs ||_dS�N��fd��selfr �r�F/opt/alt/python39/lib64/python3.9/multiprocessing/popen_spawn_posix.py�__init__sz_DupFd.__init__cCs|jSr r )rrrr�detachsz _DupFd.detachN)�__name__� __module__� __qualname__rrrrrrr sr cs4eZdZdZeZ�fdd�Zdd�Zdd�Z�Z S)rrcsg|_t��|�dSr )�_fds�superr)r� process_obj�� __class__rrrszPopen.__init__cCs|j�|�|Sr )r�appendr rrr�duplicate_for_child"s zPopen.duplicate_for_childc Cs�ddlm}|��}|j�|�t�|j�}t� �}t |�z$t � ||�t � ||�Wt d�n t d�0d}}}} z�t ��\}}t ��\}} tj||d�} |j�||g�t�t��| |j�|_||_t| ddd��} | �|���Wd�n1�s0YWg} || fD]} | du�r| �| ��qt�|tj| �|_||fD]} | du�rRt �| ��qRn`g} || fD]} | du�r|| �| ��q|t�|tj| �|_||fD]} | du�r�t �| ��q�0dS)Nr)�resource_tracker)� tracker_fdZ pipe_handle�wbF)�closefd)�rZgetfdrrrZget_preparation_data�_name�io�BytesIOrr�dump�os�pipeZget_command_line�extendrZspawnv_passfdsZget_executable�pid�sentinel�open�write� getbufferZFinalizeZ close_fds� finalizer�close)rrrrZ prep_data�fpZparent_rZchild_wZchild_rZparent_w�cmd�fZ fds_to_closer rrr�_launch&sP      � �0    �    z Popen._launch) rrr�methodr ZDupFdrrr3� __classcell__rrrrrs  ) r#r&�contextrrr!rrr�__all__�objectr rrrrr�s