
    Mh                         d Z 	 ddlZn# e$ r dZY nw xY wddlZddlZddlZddlZddlZddlm	Z	 ddl
mZ ddlmZ  G d de          Z G d d	e          ZdS )
zA parent poller for unix.    N)interrupt_main)Thread)
get_loggerc                   (     e Zd ZdZ fdZd Z xZS )ParentPollerUnixzxA Unix-specific daemon thread that terminates the program immediately
    when the parent process no longer exists.
    c                 V    t                                                       d| _        dS )zInitialize the poller.TN)super__init__daemon)self	__class__s    V/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/ipykernel/parentpoller.pyr
   zParentPollerUnix.__init__   s$        c                    ddl m} 	 	 t          j                    dk    r5t	                                          d           t          j        d           t          j        d           n## t          $ r}|j         |k    rY d}~} d}~ww xY w)zRun the poller.r   )EINTRT   -Parent appears to have exited, shutting down.g      ?N)
errnor   osgetppidr   warning_exittimesleepOSError)r   r   es      r   runzParentPollerUnix.run   s     	 		:<<1$$LL(()XYYYHQKKK
3   7e##HHHH		s   A A* *
B
4BBB
__name__
__module____qualname____doc__r
   r   __classcell__r   s   @r   r   r      sQ             
      r   r   c                   *     e Zd ZdZd fd	Zd Z xZS )ParentPollerWindowszA Windows-specific daemon thread that listens for a special event that
    signals an interrupt and, optionally, terminates the program immediately
    when the parent process no longer exists.
    Nc                     |s|sJ t                                                       t          d}t          |          d| _        || _        || _        dS )a  Create the poller. At least one of the optional parameters must be
        provided.

        Parameters
        ----------
        interrupt_handle : HANDLE (int), optional
            If provided, the program will generate a Ctrl+C event when this
            handle is signaled.
        parent_handle : HANDLE (int), optional
            If provided, the program will terminate immediately when this
            handle is signaled.
        Nz#ParentPollerWindows requires ctypesT)r	   r
   ctypesImportErrorr   interrupt_handleparent_handle)r   r*   r+   msgr   s       r   r
   zParentPollerWindows.__init__5   sa      0=000>7Cc""" 0*r   c                    	 ddl m}m} n# t          $ r ddlm}m} Y nw xY wg }| j        r|                    | j                   | j        r|                    | j                   t          j	                    d         }|
                    d          rt          j        nt          j        }	 t          j        j                            t#          |           |t#          |          z  | d|          }||cxk    rt#          |          k     rn n|||z
           }|| j        k    r:t%          t'          j        t&          j                            rt-                       n_|| j        k    r5t/                                          d           t3          j        d           n|dk     rt7          j        dd	
           dS )z-Run the poll loop. This method never returns.r   )INFINITEWAIT_OBJECT_064TFr   r   zParent poll failed.  If the frontend dies,
                the kernel may be left running.  Please let us know
                about your system (bitness, Python, etc.) at
                ipython-dev@scipy.org   )
stacklevelN)_winapir.   r/   r)   _subprocessr*   appendr+   platformarchitecture
startswithr(   c_int64c_intwindllkernel32WaitForMultipleObjectslencallablesignal	getsignalSIGINTr   r   r   r   r   warningswarn)r   r.   r/   handlesarchr:   resulthandles           r   r   zParentPollerWindows.runK   s   	<777777777 	< 	< 	<;;;;;;;;;;	<   	2NN40111 	/NN4-...$&&q)"&//$"7"7IV\	]+BBG%W%0	 F 5555W55555 -!78T222   0 ? ?@@ )&(((t111LL(()XYYYHQKKK!)  !    ;	s      )NNr   r$   s   @r   r&   r&   /   sV         
+ + + + + +,. . . . . . .r   r&   )r"   r(   r)   r   r6   r@   r   rC   _threadr   	threadingr   traitlets.logr   r   r&    r   r   <module>rM      s
    MMMM   FFF 				     " " " " " "       $ $ $ $ $ $    v   6J J J J J& J J J J Js   	 