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

207
Views
C ++ ¿En qué se llama la devolución de llamada de señal de subproceso?

Necesito ejecutar una limpieza antes de salir del servicio al finalizar (por Linux systemctl stop my-srv

Se me ocurrieron hasta ahora con 2 soluciones:

 void signal_callback(int code) { _exit(0); } . . . void main.. { signal(SIGTERM, signal_callback) fgetc(stdin); // wait for signal }

¿En qué subproceso se llama la devolución de signal_callback ? ¿Será el mismo hilo que registró la devolución de llamada? Quiero decir, si llamo a signal en el hilo principal y luego llamo a exit en signal_callback , ¿la aplicación terminará correctamente?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

¿En qué subproceso se llama la devolución de llamada_señal?

Depende de cómo envíes la señal.

  • Si envía una señal usando raise , la devolución de llamada se llamará en el mismo hilo.
  • Si envía una señal usando pthread_kill , entonces la devolución de llamada de la señal se llamará en el subproceso cuya identificación se pasó a pthread_kill .
  • Si envía una señal usando kill , creo que es mejor citar documentación:

    POSIX.1 requiere que si un proceso se envía una señal a sí mismo, y el subproceso de envío no tiene la señal bloqueada, y ningún otro subproceso la tiene desbloqueada o la está esperando en sigwait(3), al menos una señal desbloqueada debe ser entregado al subproceso de envío antes de que kill() regrese.

Habrá diferencias si

si... llamo a exit en signal_callback, ¿la aplicación terminará correctamente?

No, exit no es una función segura asíncrona. No está bien llamarlo desde un controlador de señal.

Con respecto a la edición: _exit es asíncrono seguro, por lo que puede llamarlo. Pero no llamará a las funciones de limpieza registradas, ni se desenrollará la pila, por lo que no lo describiría como "elegante" como tal.


PS main debe devolver int .

over 4 years ago · Santiago Trujillo Report

0

Por defecto, las señales se envían al proceso ; no a ningún subproceso específico que pueda tener ese proceso. Si hay varios subprocesos, los estándares no especifican qué subproceso maneja la(s) señal(es).

Por supuesto, puede enmascarar las señales para que ciertos subprocesos no las reciban o que solo un subproceso específico maneje las señales. Consulte pthread_sigmask para Linux.

si llamo a signal en el hilo principal y luego llamo a exit en signal_callback, ¿la aplicación terminará correctamente?

Lo que significa "con gracia" depende de su programa. Si configura un controlador de señal como lo ha hecho, simplemente saldrá al recibir la señal. Si el proceso muere limpiamente depende de lo que estaba haciendo cuando recibió la señal, por ejemplo, si se necesita alguna acción de limpieza, si se deben liberar recursos (los que no se liberan automáticamente al salir), etc.

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!