a  ze.@s2gdZddlZddlZddlZddlZddlZddlmZzej e Z Wne yfdZ Yn0ddZ ddZdd Zd d ZGd d d eZGdddeZGdddeZGdddeZdaeaedaea[iZeej D]0\Z!Z"e!dddkrde!vrde!ee" <qeZ#dS)) BaseProcesscurrent_processactive_childrenparent_processN)WeakSetcCstS)z@ Return process object representing the current process )_current_processrrK/opt/bitninja-python-dojo/embedded/lib/python3.9/multiprocessing/process.pyr%srcCstttS)zN Return list of process objects corresponding to live child processes )_cleanuplist _childrenrrrr r+srcCstS)z? Return process object representing the parent process )_parent_processrrrr r3srcCs*ttD]}|jdurt|qdSN)r r _popenpolldiscard)prrr r =s r c@seZdZdZddZddddifddddZd d Zd d Zd dZddZ ddZ d,ddZ ddZ ddZ eddZejddZeddZejddZedd Zejd!d Zed"d#Zed$d%ZeZed&d'Zd(d)Zd-d*d+ZdS).rz Process objects represent activity that is run in a separate process The class is analogous to `threading.Thread` cCstdSr)NotImplementedErrorselfrrr _PopenMszBaseProcess._PopenNr)daemoncCstt}tj|f|_tj|_t|_tj |_ d|_ d|_ ||_ t||_t||_|pt|jdddd|jD|_|dur||_t|dS)NF-:css|]}t|VqdSr)str).0irrr ^z'BaseProcess.__init__..)next_process_counterr _identity_configcopyosgetpid _parent_pidname _parent_namer_closed_targettuple_argsdict_kwargstype__name__join_namer _danglingadd)rgrouptargetr'argskwargsrcountrrr __init__Ps     zBaseProcess.__init__cCs|jrtddS)Nzprocess object is closed)r) ValueErrorrrrr _check_closedcszBaseProcess._check_closedcCs|jr|j|ji|jdS)zQ Method to be run in sub-process; can be overridden in sub-class N)r*r,r.rrrr rungszBaseProcess.runcCs>|t|||_|jj|_|`|`|`t |dS)z% Start child process N) r<r rrsentinel _sentinelr*r,r.r r4rrrr startns    zBaseProcess.startcCs||jdS)zT Terminate process; sends SIGTERM signal or uses TerminateProcess() N)r<r terminaterrrr rAszBaseProcess.terminatecCs||jdS)zT Terminate process; sends SIGKILL signal or uses TerminateProcess() N)r<rkillrrrr rBszBaseProcess.killcCs*||j|}|dur&t|dS)z5 Wait until child process terminates N)r<rwaitr r)rtimeoutresrrr r1s zBaseProcess.joincCsJ||turdS|jdur"dS|j}|dur8dSt|dSdS)z1 Return whether process is alive TNF)r<rrrr r)r returncoderrr is_alives   zBaseProcess.is_alivecCsH|jdur>|jdur td|jd|_|`t|d|_dS)z Close the Process object. This method releases resources held by the Process object. It is an error to call this method if the child process is still running. Nz^Cannot close a process while it is still running. You should first call join() or terminate().T)rrr;closer?r rr)rrrr rHs   zBaseProcess.closecCs|jSrr2rrrr r'szBaseProcess.namecCs ||_dSrrI)rr'rrr r'scCs|jddS)z4 Return whether process is a daemon rF)r"getrrrr rszBaseProcess.daemoncCs||jd<dS)z1 Set whether process is a daemon rNr")rdaemonicrrr rscCs |jdS)NauthkeyrKrrrr rMszBaseProcess.authkeycCst||jd<dS)z2 Set authorization key of process rMN)AuthenticationStringr")rrMrrr rMscCs"||jdur|jS|jS)zM Return exit code of process or `None` if it has yet to stop N)r<rrrrrr exitcodes zBaseProcess.exitcodecCs*||turtS|jo$|jjSdS)zU Return identifier (PID) of process or `None` if it has yet to start N)r<rr$r%rpidrrrr identszBaseProcess.identcCs2|z|jWSty,tddYn0dS)z{ Return a file descriptor (Unix) or handle (Windows) suitable for waiting for process termination. zprocess not startedN)r<r?AttributeErrorr;rrrr r>s  zBaseProcess.sentinelcCsd}|turd}nL|jrd}n@|jtkr2d}n,|jdurBd}n|j}|durZd}nd}t|jd|j g}|jdur| d|jj | d|j| ||durt ||}| d ||jr| d d d |S) Nstartedclosedunknowninitialstoppedzname=%rzpid=%sz parent=%sz exitcode=%srz<%s> )rr)r&r$r%rrr/r0r2appendrP_exitcode_to_namerJrr1)rrOstatusinforrr __repr__s0      zBaseProcess.__repr__c Csddlm}m}z`z|jdur,||jtdata | t }|a t |j |j|atjrntz|j|W~n~0|dz|d}W|n |0Wnty }zJ|jdurd}n.t|jtr|j}ntj t!|jdd}WYd}~n:d}~0d}ddl"}tj d|j#|$Yn0Wt%|d||&n t%|d||&0|S)N)utilcontextz child process calling self.run()r z Process %s: z process exiting with exitcode %d)'r_r` _start_method_force_start_method itertoolsr9r setr _close_stdinr_ParentProcessr(r&r threading_HAVE_THREAD_NATIVE_ID main_thread_set_native_id_finalizer_registryclear_run_after_forkersr\r=_exit_function SystemExitcode isinstanceintsysstderrwriter tracebackr' print_exc _shutdown_flush_std_streams)rparent_sentinelr_r` old_processrOerxrrr _bootstrap"sT            zBaseProcess._bootstrap)N)N)r0 __module__ __qualname____doc__rr:r<r=r@rArBr1rGrHpropertyr'setterrrMrOrQrPr>r]rrrrr rGsD            rc@seZdZddZdS)rNcCs,ddlm}|durtdtt|ffS)Nr^)get_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)r`r TypeErrorrNbytes)rrrrr __reduce__Xs   zAuthenticationString.__reduce__N)r0rrrrrrr rNWsrNc@s6eZdZddZddZeddZd dd ZeZdS) rhcCs4d|_||_||_d|_d|_d|_||_i|_dS)NrF)r!r2_pidr&rr)r?r")rr'rPr>rrr r:hsz_ParentProcess.__init__cCsddlm}||jgdd S)NrrCrDmultiprocessing.connectionrCr?)rrCrrr rGrs z_ParentProcess.is_alivecCs|jSr)rrrrr rQvsz_ParentProcess.identNcCs ddlm}||jg|ddS)z6 Wait until parent process terminates rrrNr)rrDrCrrr r1zs z_ParentProcess.join)N) r0rrr:rGrrQr1rPrrrr rhfs    rhc@seZdZddZddZdS) _MainProcesscCs8d|_d|_d|_d|_d|_ttddd|_dS)Nr MainProcessF z/mp)rM semprefix) r!r2r&rr)rNr$urandomr"rrrr r:s z_MainProcess.__init__cCsdSrrrrrr rHsz_MainProcess.closeN)r0rrr:rHrrrr rsrr^ZSIG_r)$__all__r$rusignalreri _weakrefsetrpathabspathgetcwd ORIGINAL_DIROSErrorrrrr objectrrrNrhrr rr9r rfr rZr __dict__itemsr'signumr3rrrr  s<     !