Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

option to not override signal handler

Aperta
#713 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
35/100
Tipo di issue
Funzionalità
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
python
Ambito
backend

Direzione di ricerca

Inizia in ipykernel/kernelbase.py, in pre_handler_hook, e traccia come dispatch_shell lo invoca. Determina come un’applicazione che incorpora il kernel potrebbe scegliere di non sostituire il proprio gestore SIGINT, quindi verifica che il gestore personalizzato rimanga intatto mentre la normale gestione dei segnali del kernel continua a funzionare.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

See also https://github.com/jupyter/qtconsole/issues/490

Hey there,

how can I embed qtconsole into an application without it overriding my own application's custom sigint handler?

Assume you have code that does

    std::signal(SIGINT, &handleSigInt);
    ...
    // do not initialize signal handlers
    const auto initsigs = 0;
    Py_InitializeEx(initsigs);

Then it is embedding qtconsole eventually, but at that point the sigint handler will be unset:

Thread 1 "QiTissue" hit Breakpoint 3, __interceptor_sigaction (signum=2, act=0x7fffffff8a60, oldact=0x7fffffff8b00)
    at /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_signal_interceptors.inc:55
55      in /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_signal_interceptors.inc
(gdb) bt
#0  __interceptor_sigaction(int, __sanitizer::__sanitizer_sigaction const*, __sanitizer::__sanitizer_sigaction*)
    (signum=2, act=0x7fffffff8a60, oldact=0x7fffffff8b00)
    at /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_signal_interceptors.inc:55
#1  0x00007fff5c055f0f in PyOS_setsig (sig=sig@entry=2, handler=handler@entry=0x7fff5c0b6fec <signal_handler>)
    at Python/pylifecycle.c:2536
#2  0x00007fff5c0b849f in signal_signal_impl
    (module=<optimized out>, handler=<built-in method default_int_handler of module object at remote 0x7fff51eeaa40>, signalnum=2) at ./Modules/signalmodule.c:505
#3  signal_signal (module=<optimized out>, args=<optimized out>, nargs=<optimized out>)
    at ./Modules/clinic/signalmodule.c.h:141
#4  0x00007fff5bf7bbf8 in cfunction_vectorcall_FASTCALL
    (func=<built-in method signal of module object at remote 0x7fff51eeaa40>, args=0x7fff58a24a88, nargsf=<optimized out>, kwnames=<optimized out>) at Objects/methodobject.c:426

or in python terms:

(gdb) py-bt
Traceback (most recent call first):
  <built-in method signal of module object at remote 0x7fff51eeaa40>
  File "/usr/lib/python3.9/signal.py", line 47, in signal
    handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler))
  File "/home/milian/.local/lib/python3.9/site-packages/ipykernel/kernelbase.py", line 280, in pre_handler_hook
    self.saved_sigint_handler = signal(SIGINT, default_int_handler)
  File "/home/milian/.local/lib/python3.9/site-packages/ipykernel/kernelbase.py", line 257, in dispatch_shell
    self.pre_handler_hook()

the kernelbase.py code seems to reset the signal handler unconditionally to some default which is highly unexpected to me:

    def pre_handler_hook(self):
        """Hook to execute before calling message handler"""
        # ensure default_int_handler during handler call
        self.saved_sigint_handler = signal(SIGINT, default_int_handler)

Is there a way to prevent this from happening?

Lingua principale
Python
Stelle
734
Fork
411
Merge medio
1g 2h
PR unite (30g)
9

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di ipython/ipykernel

Tutte le issue di ipython/ipykernel

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.