
    Xh                         d Z 	 ddlZ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y# e$ r dZY Fw xY w)
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                 0    t         |           d| _        y)zInitialize the poller.TN)super__init__daemon)self	__class__s    J/var/www/html/myenv/lib/python3.12/site-packages/ipykernel/parentpoller.pyr
   zParentPollerUnix.__init__   s        c                    ddl m} 	 	 t        j                         dk(  r.t	               j                  d       t        j                  d       t        j                  d       \# t        $ r}|j                   |k(  rY d}~z d}~ww xY w)zRun the poller.r   )EINTR   -Parent appears to have exited, shutting down.g      ?N)
errnor   osgetppidr   warning_exittimesleepOSError)r   r   es      r   runzParentPollerUnix.run   sm     	 ::<1$L(()XYHHQK

3   77e#s   AA$ $	B-BBB__name__
__module____qualname____doc__r
   r   __classcell__r   s   @r   r   r      s    
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.
    c                 ~    |s|sJ t         |           t        d}t        |      d| _        || _        || _        y)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   sG      =00>7Cc"" 0*r   c                    	 ddl m}m} g }| j
                  r|j                  | j
                         | j                  r|j                  | j                         t        j                         d   }|j                  d      rt        j                  nt        j                  }	 t        j                  j                  j!                  t#        |       |t#        |      z  | d|      }||cxk  rt#        |      k  rn n|||z
     }|| j
                  k(  r7t%        t'        j(                  t&        j*                              rft-                n[|| j                  k(  rLt/               j1                  d       t3        j4                  d       n|dk  rt7        j8                  dd	       y
# t        $ r ddlm}m} Y w xY w)z-Run the poll loop. This method never returns.r   )INFINITEWAIT_OBJECT_064Fr   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   sj   	<7
   NN4001NN4--.$$&q)"&//$"7V\\ ]]++BBG%W%0	F 5W5 -!78T222   0 0 ?@&(t111L(()XYHHQK!)  ! ;   	<;;	<s   F) )F>=F>)NNr   r$   s   @r   r&   r&   /   s    
+,.r   r&   )r"   r(   r)   r   r6   r@   r   rC   _threadr   	threadingr   traitlets.logr   r   r&    r   r   <module>rM      s[     
     "  $v 6J& JQ  Fs   A AA