a XC?h� � @ sp d dl Z d dlZddlmZmZ ddlmZ ddlmZ ddlmZ dgZ G dd � d e �ZG d d� dej�ZdS )� N� )� reduction�set_spawning_popen)� popen_fork)�spawn)�util�Popenc @ s e Zd Zdd� Zdd� ZdS )�_DupFdc C s || _ d S �N��fd��selfr � r �F/opt/alt/python39/lib64/python3.9/multiprocessing/popen_spawn_posix.py�__init__ s z_DupFd.__init__c C s | j S r r )r r r r �detach s z _DupFd.detachN)�__name__� __module__�__qualname__r r r r r r r s r c s4 e Zd ZdZeZ� fdd�Zdd� Zdd� Z� Z S )r r c s g | _ t� �|� d S r )�_fds�superr )r �process_obj�� __class__r r r s zPopen.__init__c C s | j �|� |S r )r �appendr r r r �duplicate_for_child" s zPopen.duplicate_for_childc C s� ddl m} |�� }| j�|� t�|j�}t� � }t | � z$t�||� t�||� W t d � n t d � 0 d } } }} z�t �� \}}t �� \}} tj||d�} | j�||g� t�t�� | | j�| _|| _t| ddd��}|�|�� � W d � n1 �s0 Y W g }|| fD ]} | d u�r|�| � �qt�| tj|�| _||fD ]} | d u�rRt �| � �qRn`g }|| fD ]} | d u�r||�| � �q|t�| tj|�| _||fD ]} | d u�r�t �| � �q�0 d S )Nr )�resource_tracker)� tracker_fdZpipe_handle�wbF)�closefd)� r Zgetfdr r r Zget_preparation_data�_name�io�BytesIOr r �dump�os�pipeZget_command_line�extendr Zspawnv_passfdsZget_executable�pid�sentinel�open�write� getbufferZFinalizeZ close_fds� finalizer�close)r r r r Z prep_data�fpZparent_rZchild_wZchild_rZparent_w�cmd�fZfds_to_closer r r r �_launch&