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

205
Views
C++ On what thread signal callback is called?

I need to run a cleanup before exiting service upon termination (by Linux systemctl stop my-srv

I came up so far with 2 solutions:

void signal_callback(int code)
{
    _exit(0);
}

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

on what thread the signal_callback is called? will it be the same thread which registered the callback? I mean if I call signal on main thread and then call exit in the signal_callback - will the application terminate gracefully?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

on what thread the signal_callback is called?

Depends on how you send the signal.

  • If you send a signal using raise, then the callback will be called in the same thread.
  • If you send a signal using pthread_kill, then the signal callback will be called in the thread that whose id was passed to pthread_kill.
  • If you send a signal using kill then I think it's best to quote documentation:

    POSIX.1 requires that if a process sends a signal to itself, and the sending thread does not have the signal blocked, and no other thread has it unblocked or is waiting for it in sigwait(3), at least one unblocked signal must be delivered to the sending thread before the kill() returns.

There will be differences if

if I ... call exit in the signal_callback - will the application terminate gracefully?

No, exit is not an async safe function. It's not OK to call it from a signal handler.

Regarding edit: _exit is async safe so you may call it. But it won't call registered cleanup functions, nor would the stack be unwound, so I wouldn't describe it as "graceful" as such.


P.S. main must return int.

over 4 years ago · Santiago Trujillo Report

0

By default, signals are sent to the process; not to any specific threads that process may have. If there are multiple threadss, which thread handles signal(s) isn't specified by standards.

You can of course mask the signals so that certain threads don't receive them or that only a specific thread handles the signals. See pthread_sigmask for Linux.

if I call signal on main thread and then call exit in the signal_callback - will the application terminate gracefully?

What "gracefully" means depends on your program. If you setup a signal handler as you have, it'd simply exit upon receiving the signal. Whether that the process dies cleanly depends on what it was doing when it received signal such as whether any cleanup action is needed, resources need to be released (the ones not released automatically upon exit), 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!