Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

199
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!