o
    r¨ÊhÖ  ã                   @   sP   d Z ddlZddlZddlZddlZG dd„ dƒZdd„ Zedkr&eƒ  dS dS )a  pidproxy -- run command and proxy signals to it via its pidfile.

This executable runs a command and then monitors a pidfile.  When this
executable receives a signal, it sends the same signal to the pid
in the pidfile.

Usage: %s <pidfile name> <command> [<cmdarg1> ...]
é    Nc                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚPidProxyNc              	   C   sb   z|d |dd … | _ }tj |d ¡| _|| _W d S  ttfy0   |  ¡  t	 
d¡ Y d S w )Né   é   r   )ÚpidfileÚosÚpathÚabspathÚabscmdÚcmdargsÚ
ValueErrorÚ
IndexErrorÚusageÚsysÚexit)ÚselfÚargsr
   © r   úE/var/www/html/env/lib/python3.10/site-packages/supervisor/pidproxy.pyÚ__init__   s   þzPidProxy.__init__c                 C   sb   |   ¡  t tj| j| j¡| _	 t d¡ zt 	dtj
¡d }W n ty+   d }Y nw |r0d S q)Nr   é   éÿÿÿÿr   )Ú
setsignalsr   ÚspawnvÚP_NOWAITr	   r
   ÚpidÚtimeÚsleepÚwaitpidÚWNOHANGÚOSError)r   r   r   r   r   Úgo   s   
ÿùzPidProxy.goc                 C   s   t ttjd  ƒ d S )Nr   )ÚprintÚ__doc__r   Úargv©r   r   r   r   r   )   s   zPidProxy.usagec                 C   st   t   t j| j¡ t   t j| j¡ t   t j| j¡ t   t j| j¡ t   t j| j¡ t   t j| j¡ t   t j| j	¡ d S ©N)
ÚsignalÚSIGTERMÚpasstochildÚSIGHUPÚSIGINTÚSIGUSR1ÚSIGUSR2ÚSIGQUITÚSIGCHLDÚreapr$   r   r   r   r   ,   s   zPidProxy.setsignalsc                 C   s   d S r%   r   )r   ÚsigÚframer   r   r   r/   5   s   zPidProxy.reapc                 C   sŽ   z t | jdƒ�}t| ¡  ¡ ƒ}W d   ƒ n1 sw   Y  W n   td| j ƒ Y d S t ||¡ |tj	tj
tjfv rEt d¡ d S d S )NÚrzCan't read child pidfile %s!r   )Úopenr   ÚintÚreadÚstripr!   r   Úkillr&   r'   r*   r-   r   r   )r   r0   r1   Úfr   r   r   r   r(   9   s   ÿ€ÿzPidProxy.passtochild)
Ú__name__Ú
__module__Ú__qualname__r   r   r    r   r   r/   r(   r   r   r   r   r      s    		r   c                  C   s   t tjƒ} |  ¡  d S r%   )r   r   r#   r    )Úppr   r   r   ÚmainD   s   
r=   Ú__main__)r"   r   r   r&   r   r   r=   r9   r   r   r   r   Ú<module>   s   	3
ÿ