Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

203
Visualizações
Controlador de señal SIGINT personalizado: el programa aún finaliza incluso después de que se captura la señal

Estoy jugando con las bibliotecas signal.h y unistd.h y tengo algunos problemas. En el siguiente código, cuando envío la señal SIGINT a mi programa en ejecución llamando a CTRL-C , la señal es captada. Sin embargo, al presionar CTRL-C nuevamente, el programa finaliza. Según tengo entendido, la declaración de impresión "Received signal 2" debe imprimirse cada vez que presiono CTRL-C .

¿Mi comprensión de esta señal es incorrecta o hay un error en mi código?

¡Gracias por tu contribución!

 #include "handle_signals.h" void sig_handler(int signum) { printf("\nReceived signal %d\n", signum); } int main() { signal(SIGINT, sig_handler); while(1) { sleep(1); } return 0; }

Salida terminal:

 xxx@ubuntu:~/Dropbox/xxx/handle_signals$ ./handle_signals ^C Received signal 2 ^C xxx@ubuntu:~/Dropbox/xxx/handle_signals$

Editar: aquí está el encabezado que he incluido

 #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <unistd.h> void sig_handler(int signum);

Gracias por sus respuestas. ¡Leyendo a través de ellos ahora!

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

No uses signal , usa sigaction :

El comportamiento de la señal () varía según las versiones de UNIX y también ha variado históricamente entre las diferentes versiones de Linux. Evite su uso: use sigaction(2) en su lugar.

http://man7.org/linux/man-pages/man2/signal.2.html

En los sistemas UNIX originales, cuando la entrega de una señal invocaba un controlador que se establecía mediante signal(), la disposición de la señal se restablecía a SIG_DFL y el sistema no bloqueaba la entrega de más instancias de la señal.

Linux implementa la misma semántica: el controlador se restablece cuando se entrega la señal.

over 4 years ago · Santiago Trujillo Relatório

0

El comportamiento de signal al recibir la primera señal varía según la implementación. Por lo general, requiere reinstalar el controlador después de recibir la señal, ya que el controlador se restablece a su acción predeterminada:

 void sig_handler(int signum) { signal(SIGINT, sig_handler); printf("\nReceived signal %d\n", signum); }

que es una de las razones por las que ya no debería usar signal y usar sigaction . Puede ver un ejemplo básico del uso de sigaction aquí.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda