GOOD SHELL MAS BOY
Server: Apache/2.4.52 (Ubuntu)
System: Linux vmi1836763.contaboserver.net 5.15.0-130-generic #140-Ubuntu SMP Wed Dec 18 17:59:53 UTC 2024 x86_64
User: www-data (33)
PHP: 8.4.10
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/supervisor/__pycache__/process.cpython-310.pyc
o

1ϧ\є�@s�ddlZddlZddlZddlZddlZddlZddlmZddlm	Z	ddlm
Z
ddlmZddlmZddl
mZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZddlmZmZddlmZddlmZddlmZddl m!Z!eGdd�de"��Z#Gdd�de#�Z$eGdd�de"��Z%Gdd�de%�Z&Gdd�de&�Z'Gdd�de%�Z(Gdd �d e"�Z)e)�Z)d!d"�Z*dS)#�N)�total_ordering)�maxint)�as_bytes)�	as_string)�PY2)�asyncore_25)�
ProcessStates)�SupervisorStates)�getProcessStateDescription)�STOPPED_STATES)�decode_wait_status)�signame)�ProcessException�
BadCommand)�EventListenerStates)�events)�RestartUnconditionally)�
SocketManagerc@sneZdZdZdZdZdZdZdZdZ	dZ
dZdZdZ
dZdZdZdZdZdZdZdZdd�Zdd�Zd	d
�Zdd�Zd
d�Zdd�Zejejej ej!ej"ej#ej$ej%ej&ej'ej(ej)ej*ej+ej,ej-iZ.d:dd�Z/dd�Z0dd�Z1dd�Z2dd�Z3dd�Z4dd�Z5d d!�Z6d"d#�Z7d$d%�Z8d&d'�Z9d(d)�Z:d*d+�Z;d,d-�Z<d.d/�Z=d0d1�Z>d2d3�Z?d4d5�Z@d6d7�ZAd8d9�ZBdS);�
SubprocesszA class to manage a subprocess.rNFcCs||_i|_i|_tj|_dS)zDConstructor.

        Argument is a ProcessConfig instance.
        N)�config�dispatchers�pipesr�STOPPED�state��selfr�r�4/usr/lib/python3/dist-packages/supervisor/process.py�__init__;szSubprocess.__init__cC�&|j��D]}t|d�r|��qdS)N�
removelogs)r�values�hasattrr �r�
dispatcherrrrr E�

��zSubprocess.removelogscCr)N�
reopenlogs)rr!r"r&r#rrrr&Jr%zSubprocess.reopenlogscCs4|j��D]}|��r|��|��r|��qdS�N)rr!�readable�handle_read_event�writable�handle_write_eventr#rrr�drainOs��zSubprocess.draincCsl|jr|jrttjd��|jd}|durttjd��|j|}|jr)ttjd��|j|7_|�	�dS)NzProcess already closed�stdinzProcess has no stdin channelz Process' stdin channel is closed)
�pid�killing�OSError�errno�EPIPErr�closed�input_buffer�flush)r�chars�stdin_fdr$rrr�writeZs

zSubprocess.writec	
Csz	t�|jj�}Wnty!}ztd|jjt|�f��d}~ww|r)|d}ntd��d|vrH|}z	|jj�|�}Wn<t	yGd}Yn2w|j�
�}d}d}|D]}tj�
||�}z	|jj�|�}Wn	t	ynYqSw|durw|}n|}|jj�|||�||fS)z�Internal: turn a program name into a file name, using $PATH,
        make sure it exists / is executable, raising a ProcessException
        if not zcan't parse command %r: %sNrzcommand is empty�/)�shlex�splitr�command�
ValueErrorr�str�options�statr0�get_path�os�path�join�check_execv_args)	r�commandargs�e�program�filename�strC�found�dirrrr�get_execv_argsisD���
�
�zSubprocess.get_execv_argsTcCsr|j}||ur	dS|j�|�}|dur||||�}t�|�|tjkr4t��}|jd7_||j|_	||_dS)NF�)
r�	event_map�getr�notifyr�BACKOFF�time�backoff�delay)r�	new_state�expected�	old_state�event_class�event�nowrrr�change_state�s


zSubprocess.change_statecGsF|j|vr!t|j�}d�tt|��}t|jj�}td|||f��dS)N� z%Assertion failed for %s: %s not in %s)rr
rD�maprr�name�AssertionError)r�states�
current_state�allowable_states�processnamerrr�_assertInState�s

��zSubprocess._assertInStatecCs||_|jjj�d|�dS)Nzspawnerr: %s)�spawnerrrr?�logger�info�r�msgrrr�record_spawnerr�szSubprocess.record_spawnerrc

Cs<|jj}t|jj�}|jrd|}|j�|�dSd|_d|_d|_	d|_
d|_t��|_
|�tjtjtjtj�|�tj�z|��\}}Wn'tyn}z|�|jd�|�tj�|�tj�WYd}~dSd}~wwz|j�|�\|_|_Wn@ttfy�}z2|jd}|tj kr�d|}nd|tj!�"||�f}|�|�|�tj�|�tj�WYd}~dSd}~wwz|�#�}	WnKt�y
}z>|jd}|tj$kr�d|}nd|tj!�"||�f}|�|�|�tj�|�tj�|�%|j�|�&|j�WYd}~dSd}~ww|	dk�r|�'|	�S|�(||�S)	z�Start the subprocess.  It must not be running already.

        Return the process id.  If the fork() call fails, return None.
        zprocess '%s' already runningNFrz!too many open files to spawn '%s'z-unknown error making dispatchers for '%s': %sz1Too many processes in process table to spawn '%s'z&unknown error during fork for '%s': %s))rr?rr_r.rg�warnr/rf�
exitstatus�system_stop�administrative_stoprS�	laststartrer�EXITED�FATALrRrr\�STARTINGrMrrk�args�make_dispatchersrrr0�IOErrorr1�EMFILE�	errorcoderP�fork�EAGAIN�close_parent_pipes�close_child_pipes�_spawn_as_parent�_spawn_as_child)
rr?rdrjrI�argv�what�why�coder.rrr�spawn�s|
���


�
��


��
��

zSubprocess.spawncCs\||_|jj}|�|j�|j�dt|jj�|f�d|_	t
�
�|jj|_||j
|<|S)Nzspawned: '%s' with pid %s)r.rr?r|rrgrhrr_rfrS�	startsecsrU�
pidhistory)rr.r?rrrr}	s
zSubprocess._spawn_as_parentcCsz|jj}|�|jdd�|�|jdd�|jjr$|�|jdd�n	|�|jdd�td|j�D]}|�|�q3dS)N�child_stdinr�child_stdoutrN��child_stderr�)rr?�dup2r�redirect_stderr�range�minfds�close_fd)rr?�irrr�_prepare_child_fdss�zSubprocess._prepare_child_fdsc
Cs�|jj}�zE|��|��|��}|r4|jj}d||f}|�dd|�W|�dd�|�d�dStj	�
�}d|d<|jj}|durJ|jjj}|rP||d<|jj|d	<|j
r`|j
jj|d
<|jjdurm|�|jj�|jj}	z|	dur{|�|	�Wn:ty�}
z.tj�|
jd|
jd�}d|	|f}|�dd|�WYd}
~
W|�dd�|�d�dSd}
~
wwz|jjdur�|�|jj�|�|||�Wnaty�}
z#tj�|
jd|
jd�}d
|d|f}|�dd|�WYd}
~
nEd}
~
wt��\\}}
}}}}d||||f}d
||f}|�dd|�YW|�dd�|�d�dSW|�dd�|�d�dSW|�dd�|�d�dS|�dd�|�d�w)Nzcouldn't setuid to %s: %s
r�zsupervisor: z*supervisor: child process was not spawned
��1�SUPERVISOR_ENABLED�SUPERVISOR_SERVER_URL�SUPERVISOR_PROCESS_NAME�SUPERVISOR_GROUP_NAMErzcouldn't chdir to %s: %s
zcouldn't exec %s: %s
z%s, %s: file: %s line: %s)rr?�setpgrpr��set_uid�uidr8�_exitrB�environ�copy�	serverurlr_�group�environment�update�	directory�chdirr0r1rxrPrt�umask�setumask�execve�asyncore�compact_traceback)rrIrr?�
setuid_msgr�rj�envr��cwdr�r��file�fun�line�t�v�tbinfo�errorrrrr~s|	.
�

�������zSubprocess._spawn_as_childcCs(|jtjkr)||jkr||_|jdkr%||j|jjkr'||jj|_dSdSdS|jtjkrJ||jkrF||j|jjkrH||jj|_dSdSdS|jtjkrs||j	krX||_	|jdkro||j|jj
krq||jj
|_dSdSdS|jtjkr�|jdkr�||j|jkr�||j|_dSdSdSdS)z�
        Check if system clock has rolled backward beyond test_time. If so, set
        affected timestamps to test_time.
        rN)
rrrsrprUrr��RUNNING�STOPPING�laststopreport�stopwaitsecsrRrT)r�	test_timerrr�+_check_and_adjust_for_system_clock_rollbackfs*
��
��z6Subprocess._check_and_adjust_for_system_clock_rollbackcCsd|_d|_|�|jj�S)z Administrative stop Tr)ror��killr�
stopsignal�rrrr�stop|szSubprocess.stopcCsZ|jtjkr)t��}|�|�||jdkr+|jjj�	dt
|jj��||_dSdSdS)z8 Log a 'waiting for x to stop' message with throttling. r�zwaiting for %s to stopN)rrr�rSr�r�rr?rgrhrr_)rr[rrr�stop_report�s

�
�zSubprocess.stop_reportcCs.d|_d|_d|_|�tj�|�tj�dS)NrT)rUrTrnrerrRr\rrr�rrr�give_up�s
zSubprocess.give_upc
Csdt��}|jj}t|jj�}|jtjkr&d|}|j�	|�|�
tj�dS|js9d|t
|�f}|j�	|�|S|jtjkrD|jj}n|jj}d}|rNd}|j�	d||j|t
|�f�d|_||jj|_|�tjtjtj�|�
tj�|j}|r�|j}z	|�||�WdSt��}	d||j|	f}|j�|�|�
tj�d	|_d
|_d	|_|YS)z�Send a signal to the subprocess.  This may or may not kill it.

        Return None if the signal was sent, or an error message string
        if an error occurred or if the subprocess is not running.
        z0Attempted to kill %s, which is in BACKOFF state.Nz6attempted to kill %s with sig %s but it wasn't running�zprocess group z$killing %s (pid %s) %swith signal %sTz"unknown problem killing %s (%s):%srF)rSrr?rr_rrrRrg�debugr\rr.r
r��killasgroup�stopasgroupr/r�rUrer�rsr��	traceback�
format_exc�critical�UNKNOWN)
r�sigr[r?rdrjr��as_groupr.�tbrrrr��sj�
�
�����zSubprocess.killcCs�|jj}t|jj�}|jsd|t|�f}|j�|�|S|j�d||jt|�f�|�t	j
t	jt	j�z
|�
|j|�WdSt��}d||j|f}|j�|�|�t	j�d|_|YS)z�Send a signal to the subprocess, without intending to kill it.

        Return None if the signal was sent, or an error message string
        if an error occurred or if the subprocess is not running.
        z1attempted to send %s sig %s but it wasn't runningzsending %s (pid %s) sig %sz&unknown problem sending sig %s (%s):%srN)rr?rr_r.r
rgr�rerr�rsr�r�r�r�r�r\r�)rr�r?rdrjr�rrr�signal�s<
����
��zSubprocess.signalc	Cs�|��t|�\}}t��}|�|�||_t|jj�}||jkr+||j|jj	k}nd}|jj
j�d||j
f�||jjv}|jr_d|_d|_||_d||f}|�tj�|�tj�n`|r|d|_d|_d||df}|�tj�|�tj�nCd|_d|_||_|jtjkr�|�tj�|�tj�|r�d||d	f}|jtjd
d�nd||_d||df}|jtjdd�|jj
j�|�d|_
|jj
�|j �i|_ i|_!|j"dur�t#�$t#�%||j"��d|_"dSdS)
zK The process was reaped and we need to report and manage its state
        Fz�process '%s' (%s) laststart time is in the future, don't know how long process was running so assuming it did not exit too quicklyrzstopped: %s (%s)Nz1Exited too quickly (process log may have details)zexited: %s (%s)z; not expectedz
; expectedT)rWzBad exit code %s)&r,rrSr��laststoprrr_rpr�r?rgrlr.�	exitcodesr/rUrmrerr�r\rrfrsrRrTrr�rqrhr{rrrZrrQ�EventRejectedEvent)	rr.�sts�esrjr[rd�too_quickly�
exit_expectedrrr�finishsb


��


�zSubprocess.finishcCs&|jjdurdS|jj�|jj�}|Sr')rr�r?�drop_privilegesrirrrr�\szSubprocess.set_uidcC�|jj|jjkSr'�r�priority�r�otherrrr�__lt__b�zSubprocess.__lt__cC�|jj|jjkSr'r�r�rrr�__eq__eszSubprocess.__eq__cCs4|jj}tr
t|��d�}dt|�|t|���fS)N�unicode-escapez+<Subprocess at %s with name %s in state %s>)rr_rr�encode�idr
�	get_state�rr_rrr�__repr__is
�zSubprocess.__repr__cCs|jSr')rr�rrrr�tszSubprocess.get_statecCs�t��}|j}|�|�|jjj}|jjjtjkr_|t	j
kr9|jjr8|jjtur-|�
�n2|j|jjvr8|�
�n&|t	jkrJ|jsJ|jjrI|�
�n|t	jkr_|j|jjkr_||jkr_|�
�t|jj�}|t	jkr�||j|jjkr�d|_d|_|�t	j�|�t	j�d|jj}|�d||f�|t	jkr�|j|jjkr�|��d}|�d||f�dSdS|t	j kr�|j|}|dkr�|jjj�!d||j"f�|�#t$j%�dSdSdS)NrzNentered RUNNING state, process has stayed up for > than %s seconds (startsecs)zsuccess: %s %sz7entered FATAL state, too many start retries too quicklyzgave up: %s %szkilling '%s' (%s) with SIGKILL)&rSrr�rr?rg�moodr	�
RESTARTINGrrq�autorestartrr�rmr�rrp�	autostartrRrT�startretriesrUrr_rsr�rer\r�rhr�r�rlr.r�r��SIGKILL)rr[rrgrdrj�	time_leftrrr�
transitionwsb



��


��
�


���zSubprocess.transition)T)C�__name__�
__module__�__qualname__�__doc__r.rr�listener_staterZrpr�r�rUrornr/rTrrrmrfr�rr r&r,r8rMrrRr�ProcessStateBackoffEventrr�ProcessStateFatalEventr��ProcessStateUnknownEventr�ProcessStateStoppedEventrq�ProcessStateExitedEventr��ProcessStateRunningEventrs�ProcessStateStartingEventr��ProcessStateStoppingEventrOr\rerkr�r}r�r~r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr!sn
/�
IGK%Wrc@s@eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)�FastCGISubprocessz7Extends Subprocess class to handle FastCGI subprocessescCst�||�d|_dSr')rr�	fcgi_sockrrrrr�s
zFastCGISubprocess.__init__cCsH|jdur	td��t|jd�std|jt|j�f��|jj��|_dS)zU
        The FastCGI socket needs to be created by the parent before we fork
        Nz"No group set for FastCGISubprocess�socket_managerzNo SocketManager set for %s:%s)r��NotImplementedErrorr"rLr��
get_socketr�r�rrr�before_spawn�s
�zFastCGISubprocess.before_spawncCs$|��t�|�}|durd|_|S)zR
        Overrides Subprocess.spawn() so we can hook in before it happens
        N)r�rr�r�)rr.rrrr��s

zFastCGISubprocess.spawncCs
d|_dS)zM
        Releases reference to FastCGI socket when process is reaped
        N)r�r�rrr�after_finish�s
zFastCGISubprocess.after_finishcCst�|||�}|��|S)zR
        Overrides Subprocess.finish() so we can hook in after it happens
        )rr�r�)rr.r��retvalrrrr��szFastCGISubprocess.finishcCs~|j��}|jj}|�|d�|�|jdd�|jjr&|�|jdd�n	|�|jdd�td|j�D]}|�	|�q5dS)z�
        Overrides Subprocess._prepare_child_fds()
        The FastCGI socket needs to be set to file descriptor 0 in the child
        rr�rNr�r�r�N)
r��filenorr?r�rr�r�r�r�)r�sock_fdr?r�rrrr��s
�z$FastCGISubprocess._prepare_child_fdsN)
r�r�r�r�rr�r�r�r�r�rrrrr��sr�c@s\eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�ZdS)�ProcessGroupBasecCs0||_i|_|jjD]}|�|�|j|j<q
dSr')r�	processes�process_configs�make_processr_)rr�pconfigrrrr�s
�zProcessGroupBase.__init__cCr�r'r�r�rrrr��r�zProcessGroupBase.__lt__cCr�r'r�r�rrrr�r�zProcessGroupBase.__eq__cCs.|jj}tr
t|��d�}d|jt|�|fS)Nr�z<%s instance at %s named %s>)rr_rrr��	__class__r�r�rrrr�s�zProcessGroupBase.__repr__cC�|j��D]}|��qdSr')rr!r �r�processrrrr �
�zProcessGroupBase.removelogscCrr')rr!r&r	rrrr&rzProcessGroupBase.reopenlogscCsnt|j���}|��|��|D]#}|��}|tjkr!|��q|tj	kr+|��q|tj
kr4|��qdSr')�listrr!�sort�reverser�rr�r�rsrRr�)rr�procrrrr�stop_alls




��zProcessGroupBase.stop_allcCsdd�|j��D�S)z@ Processes which aren't in a state that is considered 'stopped' cSsg|]
}|��tvr|�qSr)r�r)�.0�xrrr�
<listcomp>'s�z<ProcessGroupBase.get_unstopped_processes.<locals>.<listcomp>)rr!r�rrr�get_unstopped_processes%sz(ProcessGroupBase.get_unstopped_processescCs$i}|j��D]}|�|j�q|Sr')rr!r�r)rrr
rrr�get_dispatchers*sz ProcessGroupBase.get_dispatcherscCsdSr'rr�rrr�
before_remove0szProcessGroupBase.before_removeN)
r�r�r�rr�r�r�r r&rrrrrrrrr�s	rc@�eZdZdd�ZdS)�ProcessGroupcCrr')rr!r�)rrrrrr�4rzProcessGroup.transitionN)r�r�r�r�rrrrr3�rc@r)�FastCGIProcessGroupc
Kslt�||�|�dt�}||j|jjd�|_z|j��WdSt	y5}zt
d|j��|f��d}~ww)N�
socketManager)rgz&Could not create FastCGI socket %s: %s)rrrPr�
socket_configr?rgr�r��	Exceptionr=r)rr�kwargs�sockManagerKlassrGrrrr:s�
����zFastCGIProcessGroup.__init__N�r�r�r�rrrrrr8src@s^eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zddd
�Zdd�Z	dd�Z
dd�Zdd�ZdS)�EventListenerPoolcCs0t�||�g|_d|_d|_d|_|��dS)N���r)rr�event_buffer�serial�
last_dispatch�dispatch_throttle�
_subscriberrrrrJszEventListenerPool.__init__cCs0|j}|j��}||vr|j|jdd�dSdS)NT��head)r
rr!�_acceptEventrZ)rrZr
�procsrrr�handle_rejectedRs

�z!EventListenerPool.handle_rejectedcCs�|j��}d}|D]}|��|jtjkr|jtjkrd}q	|r?|j	r9t
�
�}||jkr/||_||j|j	kr9dS|��dSdS)NFT)
rr!r�rrr�r�r�READYr&rSr%�dispatch)rr�dispatch_capabler
r[rrrr�Ys"
�
�zEventListenerPool.transitioncCs|��dSr')�_unsubscriber�rrrrpszEventListenerPool.before_removecCsD|jr|j�d�}|�|�}|s|j|dd�n|jst��|_dS)NrTr()r#�pop�_dispatchEventr*rSr%)rrZ�okrrrr.ss
�	zEventListenerPool.dispatchFcCs�t|jj�}t|d�stt�|_t|d�si|_|jj|jvr)t|�|j|jj<n|jjj	�
d|j|t|j�|jj
f�t|j�|jj
kr\|jr\|j�d�}|jjj	�d||jf�|rg|j�d|�dS|j�|�dS)Nr$�pool_serialsz6rebuffering event %s for pool %s (buf size=%d, max=%d)rz4pool %s event buffer overflowed, discarding event %s)rrr_r"�
new_serial�GlobalSerialr$r4r?rgr��lenr#�buffer_sizer1r��insert�append)rrZr)rd�discarded_eventrrrr*s2



���
��zEventListenerPool._acceptEventc
Cs�|j|jj}|j��D]p}|jtjkrq|jt	j
kr|t|jj�}|��}z|j
}|j}|�||||�}|�t|��Wn(tyd}	z|	jdtjkrM�|jjj�d|j|f�WYd}	~	qd}	~	wwt	j|_||_|jjj�d|j|f�dSqdS)NrzNepipe occurred while sending event %s to listener %s, listener state unchangedzevent %s sent to listener %sTF)r4rr_rr!rrr�r�rr-r�payloadrr$�_eventEnveloper8rr0rtr1r2r?rgr��BUSYrZ)
rrZ�pool_serialr
rdr<�
event_typer$�enveloper�rrrr2�sH�
�����

���z EventListenerPool._dispatchEventc	Cs:t�|�}t|�}d|jjj||jj||||d�}d|S)Nz3.0)�ver�sidr$�	pool_namer?�
event_namer7r<z�ver:%(ver)s server:%(sid)s serial:%(serial)s pool:%(pool_name)s poolserial:%(pool_serial)s eventname:%(event_name)s len:%(len)s
%(payload)s)r�getEventNameByTyper7rr?�
identifierr_)rr@r$r?r<rE�payload_len�Drrrr=�s
�
�z EventListenerPool._eventEnvelopecC�0|jjD]	}t�||j�qt�tj|j�dSr')r�pool_eventsr�	subscriber*r�r,�rr@rrrr'��zEventListenerPool._subscribecCrJr')rrKr�unsubscriber*r�r,rMrrrr0�rNzEventListenerPool._unsubscribeN)F)
r�r�r�rr,r�rr.r*r2r=r'r0rrrrr!Is
"r!c@r)r6cCs
d|_dS)Nr")r$r�rrrr�s
zGlobalSerial.__init__Nr rrrrr6�rr6cCs$|jtkrd|_|jd7_|jS)Nr"rN)r$r)�instrrrr5�s
r5)+rBrSr1r:r�r��	functoolsr�supervisor.compatrrrr�supervisor.medusarr��supervisor.statesrr	r
r�supervisor.optionsrr
rr�supervisor.dispatchersr�
supervisorr�supervisor.datatypesr�supervisor.socket_managerr�objectrr�rrrr!r6r5rrrr�<module>sP=>