Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

option to not override signal handler

Aberta
#713 1 comentário 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
35/100
Tipo de issue
Funcionalidade
Clareza
Razoavelmente clara
Status de atividade
Estagnada
Stack de tecnologia
python
Domínio
backend

Direção de pesquisa

Comece em ipykernel/kernelbase.py, em pre_handler_hook, e acompanhe como dispatch_shell o invoca. Determine como uma aplicação incorporadora poderia optar por não substituir seu handler de SIGINT e, em seguida, verifique se o handler personalizado permanece intacto enquanto o tratamento normal de sinais do kernel continua funcionando.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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?

Linguagem predominante
Python
Estrelas
734
Forks
412
Merge médio
1d 9h
PRs com merge (30d)
13

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de ipython/ipykernel

Todas as issues de ipython/ipykernel

Issues semelhantes

Mais issues de Python

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.