HEX
Server: nginx/1.30.4
System: Linux d-twindigital-web-1.host-ed.eu 4.18.0-553.141.2.el8_10.x86_64 #1 SMP Wed Jul 8 10:28:18 EDT 2026 x86_64
User: u_twindigital_html (1009)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: //proc/self/root/lib/python3.6/site-packages/supervisor/__pycache__/process.cpython-36.pyc
3

:��]є�@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�/usr/lib/python3.6/process.py�__init__;szSubprocess.__init__cCs*x$|jj�D]}t|d�r|j�qWdS)N�
removelogs)r�values�hasattrr)r�
dispatcherrrrrEs
zSubprocess.removelogscCs*x$|jj�D]}t|d�r|j�qWdS)N�
reopenlogs)rrr r")rr!rrrr"Js
zSubprocess.reopenlogscCs8x2|jj�D]$}|j�r |j�|j�r|j�qWdS)N)rr�readableZhandle_read_event�writableZhandle_write_event)rr!rrr�drainOs
zSubprocess.draincCsn|js|jrttjd��|jd}|dkr8ttjd��|j|}|jrTttjd��|j|7_|j	�dS)NzProcess already closed�stdinzProcess has no stdin channelz Process' stdin channel is closed)
�pid�killing�OSError�errno�EPIPErr�closedZinput_buffer�flush)r�charsZstdin_fdr!rrr�writeZs

zSubprocess.writec	Cs$ytj|jj�}Wn:tk
rL}ztd|jjt|�f��WYdd}~XnX|r\|d}ntd��d|kr�|}y|jjj|�}Wnt	k
r�d}YnXnl|jj
�}d}d}xD|D]<}tjj
||�}y|jjj|�}Wnt	k
r�Yq�XPq�W|dk�r|}n|}|jjj|||�||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�splitrZcommand�
ValueErrorr�str�options�statr)�get_path�os�path�joinZcheck_execv_args)	rZcommandargs�eZprogram�filename�str9�found�dirrrr�get_execv_argsis:&



zSubprocess.get_execv_argsTcCsr|j}||krdS|jj|�}|dk	r<||||�}tj|�|tjkrhtj�}|jd7_||j|_	||_dS)NF�)
r�	event_map�getr�notifyr�BACKOFF�time�backoff�delay)rZ	new_state�expectedZ	old_stateZevent_class�event�nowrrr�change_state�s

zSubprocess.change_statecGsF|j|krBt|j�}djtt|��}t|jj�}td|||f��dS)N� z%Assertion failed for %s: %s not in %s)rr
r:�maprr�name�AssertionError)rZstatesZ
current_stateZallowable_states�processnamerrr�_assertInState�s

zSubprocess._assertInStatecCs||_|jjjjd|�dS)Nzspawnerr: %s)�spawnerrrr5�logger�info)r�msgrrr�record_spawnerr�szSubprocess.record_spawnerrc
-Cs4|jj}t|jj�}|jr2d|}|jj|�dSd|_d|_d|_	d|_
d|_tj�|_
|jtjtjtjtj�|jtj�y|j�\}}WnHtk
r�}z,|j|jd�|jtj�|jtj�dSd}~XnXy|jj|�\|_|_Wn~ttfk
�rn}z\|jd}|tj k�r(d|}nd|tj!j"||�f}|j|�|jtj�|jtj�dSd}~XnXy|j#�}	Wn�tk
�r}zt|jd}|tj$k�r�d|}nd|tj!j"||�f}|j|�|jtj�|jtj�|j%|j�|j&|j�dSd}~XnX|	dk�r$|j'|	�S|j(||�SdS)	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))rr5rrOr'rT�warnr(rS�
exitstatus�system_stop�administrative_stoprF�	laststartrRr�EXITED�FATALrErrL�STARTINGr@rrW�argsZmake_dispatchersrrr)�IOErrorr*ZEMFILE�	errorcoderC�forkZEAGAIN�close_parent_pipes�close_child_pipes�_spawn_as_parent�_spawn_as_child)
rr5rQrVr<�argvZwhat�why�coder'rrr�spawn�sh







zSubprocess.spawncCs\||_|jj}|j|j�|jjdt|jj�|f�d|_	t
j
�|jj|_||j
|<|S)Nzspawned: '%s' with pid %s)r'rr5rerrTrUrrOrSrF�	startsecsrHZ
pidhistory)rr'r5rrrrf	s
zSubprocess._spawn_as_parentcCs~|jj}|j|jdd�|j|jdd�|jjrH|j|jdd�n|j|jdd�xtd|j�D]}|j|�qhWdS)NZchild_stdinr�child_stdoutrA��child_stderr�)rr5�dup2r�redirect_stderr�range�minfds�close_fd)rr5�irrr�_prepare_child_fdsszSubprocess._prepare_child_fdsc&Cs4|jj}�z|j�|j�|j�}|rP|jj}d||f}|jdd|�dStjj	�}d|d<|jj
}|dkr||jjj
}|r�||d<|jj|d<|jr�|jjj|d<|jj
dk	r�|j|jj
�|jj}	y|	dk	r�|j|	�WnXtk
�r8}
z:tjj|
jd	|
jd	�}d
|	|f}|jdd|�dSd}
~
XnXy.|jjdk	�rX|j|jj�|j|||�Wn�tk
�r�}
z@tjj|
jd	|
jd	�}d|d	|f}|jdd|�WYdd}
~
XnNtj�\\}}
}}}}d||||f}d||f}|jdd|�YnXWd|jdd
�|jd�XdS)Nzcouldn't setuid to %s: %s
rnzsupervisor: �1ZSUPERVISOR_ENABLEDZSUPERVISOR_SERVER_URLZSUPERVISOR_PROCESS_NAMEZSUPERVISOR_GROUP_NAMErzcouldn't chdir to %s: %s
zcouldn't exec %s: %s
z%s, %s: file: %s line: %sz*supervisor: child process was not spawned
�)rr5�setpgrprw�set_uid�uidr/r8�environ�copy�	serverurlrO�groupZenvironment�updateZ	directory�chdirr)r*rbrCr`�umaskZsetumask�execve�asyncoreZcompact_traceback�_exit)rr<rhr5Z
setuid_msgr|rV�envr�cwdrirj�fileZfun�line�t�vZtbinfo�errorrrrrgs\	

 zSubprocess._spawn_as_childcCs�|jtjkrH||jkr||_|jdkr�||j|jjkr�||jj|_n�|jtjkr�||jkr�||j|jjkr�||jj|_nz|jtjkr�||j	kr�||_	|jdkr�||j|jj
kr�||jj
|_n2|jtjkr�|jdkr�||j|jkr�||j|_dS)z�
        Check if system clock has rolled backward beyond test_time. If so, set
        affected timestamps to test_time.
        rN)
rrr_r\rHrrl�RUNNING�STOPPING�laststopreport�stopwaitsecsrErG)rZ	test_timerrr�+_check_and_adjust_for_system_clock_rollbackfs 

z6Subprocess._check_and_adjust_for_system_clock_rollbackcCsd|_d|_|j|jj�S)z Administrative stop Tr)r[r��killrZ
stopsignal)rrrr�stop|szSubprocess.stopcCsR|jtjkrNtj�}|j|�||jdkrN|jjjj	dt
|jj��||_dS)z8 Log a 'waiting for x to stop' message with throttling. rnzwaiting for %s to stopN)rrr�rFr�r�rr5rTrUrrO)rrKrrr�stop_report�s

zSubprocess.stop_reportcCs.d|_d|_d|_|jtj�|jtj�dS)NrT)rHrGrZrRrrErLr^)rrrr�give_up�s
zSubprocess.give_upc

Csdtj�}|jj}t|jj�}|jtjkrLd|}|jj	|�|j
tj�dS|jsrd|t
|�f}|jj	|�|S|jtjkr�|jj}n|jj}d}|r�d}|jj	d||j|t
|�f�d|_||jj|_|jtjtjtj�|j
tj�|j}|�r|j}y|j||�WnLtj�}	d||j|	f}|jj|�|j
tj�d	|_d
|_d	|_|SdS)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)rFrr5rrOrrrErT�debugrLrr'r
r��killasgroupZstopasgroupr(r�rHrRr�r_r��	traceback�
format_exc�critical�UNKNOWN)
r�sigrKr5rQrVr�Zas_groupr'�tbrrrr��s^
zSubprocess.killc
Cs�|jj}t|jj�}|js:d|t|�f}|jj|�|S|jjd||jt|�f�|jt	j
t	jt	j�y|j
|j|�Wn@tj�}d||j|f}|jj|�|jt	j�d|_|SdS)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)rr5rrOr'r
rTr�rRrr�r_r�r�r�r�r�rLr�)rr�r5rQrVr�rrr�signal�s2zSubprocess.signalc	Cs�|j�t|�\}}tj�}|j|�||_t|jj�}||jkrV||j|jj	k}nd}|jj
jjd||j
f�||jjk}|jr�d|_d|_||_d||f}|jtj�|jtj�n�|r�d|_d|_d||df}|jtj�|jtj�n�d|_d|_||_|jtjk�r$|jtj�|jtj�|�rXd||d	f}|jtjd
d�n*d||_d||df}|jtjdd�|jj
jj|�d|_
|jj
j|j �i|_ i|_!|j"dk	�r�t#j$t#j%||j"��d|_"dS)
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)rIzBad exit code %s)&r%rrFr��laststoprrrOr\rlr5rTrXr'�	exitcodesr(rHrYrRrr�rLrrSr_rErGrr�r]rUrdrrrJrrD�EventRejectedEvent)	rr'�stsZesrVrKrQZtoo_quicklyZ
exit_expectedrrr�finishs\



zSubprocess.finishcCs&|jjdkrdS|jjj|jj�}|S)N)rr|r5Zdrop_privileges)rrVrrrr{\szSubprocess.set_uidcCs|jj|jjkS)N)r�priority)r�otherrrr�__lt__bszSubprocess.__lt__cCs|jj|jjkS)N)rr�)rr�rrr�__eq__eszSubprocess.__eq__cCs4|jj}trt|�jd�}dt|�|t|j��fS)Nzunicode-escapez+<Subprocess at %s with name %s in state %s>)rrOrr�encode�idr
�	get_state)rrOrrr�__repr__iszSubprocess.__repr__cCs|jS)N)r)rrrrr�tszSubprocess.get_statecCs�tj�}|j}|j|�|jjj}|jjjtjkr�|t	j
krr|jjr�|jjtkrZ|j
�q�|j|jjkr�|j
�nN|t	jkr�|jr�|jjr�|j
�n*|t	jkr�|j|jjkr�||jkr�|j
�t|jj�}|t	jk�r.||j|jjk�r.d|_d|_|jt	j�|jt	j�d|jj}|jd||f�|t	jk�rj|j|jjk�r�|j�d}|jd||f�nF|t	j k�r�|j|}|dk�r�|jjjj!d||j"f�|j#t$j%�dS)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)&rFrr�rr5rTZmoodr	Z
RESTARTINGrr]ZautorestartrrkrYr�rr\Z	autostartrErGZstartretriesrHrrOr_rlrRrLr�rUr�r�rXr'r�r��SIGKILL)rrKrrTrQrVZ	time_leftrrr�
transitionwsP











zSubprocess.transition)T)C�__name__�
__module__�__qualname__�__doc__r'rr�listener_staterJr\r�r�rHr[rZr(rGrrrYrSr�rrr"r%r/r@rrErZProcessStateBackoffEventr^ZProcessStateFatalEventr�ZProcessStateUnknownEventrZProcessStateStoppedEventr]ZProcessStateExitedEventr�ZProcessStateRunningEventr_ZProcessStateStartingEventr�ZProcessStateStoppingEventrBrLrRrWrkrfrwrgr�r�r�r�r�r�r�r{r�r�r�r�r�rrrrr!sj
/
IGK%Wrc@s@eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)�FastCGISubprocessz7Extends Subprocess class to handle FastCGI subprocessescCstj||�d|_dS)N)rr�	fcgi_sock)rrrrrr�szFastCGISubprocess.__init__cCsH|jdkrtd��t|jd�s6td|jt|j�f��|jjj�|_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 r?r��
get_socketr�)rrrr�before_spawn�s
zFastCGISubprocess.before_spawncCs$|j�tj|�}|dkr d|_|S)zR
        Overrides Subprocess.spawn() so we can hook in before it happens
        N)r�rrkr�)rr'rrrrk�s

zFastCGISubprocess.spawncCs
d|_dS)zM
        Releases reference to FastCGI socket when process is reaped
        N)r�)rrrr�after_finish�szFastCGISubprocess.after_finishcCstj|||�}|j�|S)zR
        Overrides Subprocess.finish() so we can hook in after it happens
        )rr�r�)rr'r�Zretvalrrrr��szFastCGISubprocess.finishcCs�|jj�}|jj}|j|d�|j|jdd�|jjrL|j|jdd�n|j|jdd�xtd|j�D]}|j	|�qlWdS)z�
        Overrides Subprocess._prepare_child_fds()
        The FastCGI socket needs to be set to file descriptor 0 in the child
        rrmrArnrorpN)
r��filenorr5rqrrrrsrtru)rZsock_fdr5rvrrrrw�s
z$FastCGISubprocess._prepare_child_fdsN)
r�r�r�r�rr�rkr�r�rwrrrrr��sr�c@s\eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�ZdS)�ProcessGroupBasecCs4||_i|_x"|jjD]}|j|�|j|j<qWdS)N)r�	processesZprocess_configsZmake_processrO)rrZpconfigrrrr�szProcessGroupBase.__init__cCs|jj|jjkS)N)rr�)rr�rrrr��szProcessGroupBase.__lt__cCs|jj|jjkS)N)rr�)rr�rrrr�szProcessGroupBase.__eq__cCs.|jj}trt|�jd�}d|jt|�|fS)Nzunicode-escapez<%s instance at %s named %s>)rrOrrr��	__class__r�)rrOrrrr�s
zProcessGroupBase.__repr__cCs x|jj�D]}|j�qWdS)N)r�rr)r�processrrrrszProcessGroupBase.removelogscCs x|jj�D]}|j�qWdS)N)r�rr")rr�rrrr"szProcessGroupBase.reopenlogscCsrt|jj��}|j�|j�xN|D]F}|j�}|tjkrD|j�q$|tj	krX|j�q$|tj
kr$|j�q$WdS)N)�listr�r�sort�reverser�rr�r�r_rEr�)rr��procrrrr�stop_alls





zProcessGroupBase.stop_allcCsdd�|jj�D�S)z@ Processes which aren't in a state that is considered 'stopped' cSsg|]}|j�tkr|�qSr)r�r)�.0�xrrr�
<listcomp>'sz<ProcessGroupBase.get_unstopped_processes.<locals>.<listcomp>)r�r)rrrr�get_unstopped_processes%sz(ProcessGroupBase.get_unstopped_processescCs(i}x|jj�D]}|j|j�qW|S)N)r�rr�r)rrr�rrr�get_dispatchers*sz ProcessGroupBase.get_dispatcherscCsdS)Nr)rrrr�
before_remove0szProcessGroupBase.before_removeN)
r�r�r�rr�r�r�rr"r�r�r�r�rrrrr��s	r�c@seZdZdd�ZdS)�ProcessGroupcCs x|jj�D]}|j�qWdS)N)r�rr�)rr�rrrr�4szProcessGroup.transitionN)r�r�r�r�rrrrr�3sr�c@seZdZdd�ZdS)�FastCGIProcessGroupcKsxtj||�|jdt�}||j|jjd�|_y|jj�Wn8t	k
rr}zt
d|jj�|f��WYdd}~XnXdS)NZ
socketManager)rTz&Could not create FastCGI socket %s: %s)r�rrCrZ
socket_configr5rTr�r��	Exceptionr3r)rr�kwargsZsockManagerKlassr;rrrr:szFastCGIProcessGroup.__init__N)r�r�r�rrrrrr�8sr�c@s^eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zddd
�Zdd�Z	dd�Z
dd�Zdd�ZdS)�EventListenerPoolcCs0tj||�g|_d|_d|_d|_|j�dS)NrAr���)r�r�event_buffer�serial�
last_dispatch�dispatch_throttle�
_subscribe)rrrrrrJszEventListenerPool.__init__cCs,|j}|jj�}||kr(|j|jdd�dS)NT)�head)r�r�r�_acceptEventrJ)rrJr�Zprocsrrr�handle_rejectedRs
z!EventListenerPool.handle_rejectedcCs�|jj�}d}x0|D](}|j�|jtjkr|jtjkrd}qW|r~|j	rvt
j
�}||jkrb||_||j|j	krvdS|j�dS)NFT)
r�rr�rrr�r�r�READYr�rFr��dispatch)rr�Zdispatch_capabler�rKrrrr�Ys


zEventListenerPool.transitioncCs|j�dS)N)�_unsubscribe)rrrrr�pszEventListenerPool.before_removecCsDx4|jr4|jjd�}|j|�}|s|j|dd�PqWtj�|_dS)NrT)r�)r��pop�_dispatchEventr�rFr�)rrJ�okrrrr�ss
zEventListenerPool.dispatchFcCs�t|jj�}t|d�s tt�|_t|d�s0i|_|jj|jkrRt|�|j|jj<n(|jjj	j
d|j|t|j�|jj
f�t|j�|jj
kr�|jr�|jjd�}|jjj	jd||jf�|r�|jjd|�n|jj|�dS)Nr��pool_serialsz6rebuffering event %s for pool %s (buf size=%d, max=%d)rz4pool %s event buffer overflowed, discarding event %s)rrrOr �
new_serial�GlobalSerialr�r�r5rTr��lenr��buffer_sizer�r��insert�append)rrJr�rQZdiscarded_eventrrrr�s(




zEventListenerPool._acceptEventc
Cs|j|jj}x�|jj�D]�}|jtjkr,q|jt	j
krt|jj�}|j�}y.|j
}|j}|j||||�}|jt|��WnPtk
r�}	z4|	jdtjkr��|jjjjd|j|f�wWYdd}	~	XnXt	j|_||_|jjjjd|j|f�dSqWdS)NrzNepipe occurred while sending event %s to listener %s, listener state unchangedzevent %s sent to listener %sTF)r�rrOr�rrrr�r�rr�r�payloadr�r��_eventEnveloper/rr)r`r*r+r5rTr�ZBUSYrJ)
rrJ�pool_serialr�rQr��
event_typer�Zenveloperirrrr��s6

z EventListenerPool._dispatchEventc	Cs:tj|�}t|�}d|jjj||jj||||d�}d|S)Nz3.0)ZverZsidr�Z	pool_namer��
event_namer�r�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)rZgetEventNameByTyper�rr5Z
identifierrO)rr�r�r�r�r�Zpayload_len�Drrrr��s
z EventListenerPool._eventEnvelopecCs4x|jjD]}tj||j�q
Wtjtj|j�dS)N)r�pool_eventsrZ	subscriber�r�r�)rr�rrrr��szEventListenerPool._subscribecCs4x|jjD]}tj||j�q
Wtjtj|j�dS)N)rr�rZunsubscriber�r�r�)rr�rrrr��szEventListenerPool._unsubscribeN)F)
r�r�r�rr�r�r�r�r�r�r�r�r�rrrrr�Is
"r�c@seZdZdd�ZdS)r�cCs
d|_dS)NrAr�)r�)rrrrr�szGlobalSerial.__init__N)r�r�r�rrrrrr��sr�cCs$|jtkrd|_|jd7_|jS)NrAr�)r�r)Zinstrrrr��s
r�)+r8rFr*r1r�r��	functoolsrZsupervisor.compatrrrrZsupervisor.medusarr�Zsupervisor.statesrr	r
rZsupervisor.optionsrr
rrZsupervisor.dispatchersrZ
supervisorrZsupervisor.datatypesrZsupervisor.socket_managerr�objectrr�r�r�r�r�r�r�rrrr�<module>sN=>