類 Unix 作業系統的訊號處理程式
由於核心使用 C 呼叫約定呼叫訊號處理程式,因此我們必須告訴編譯器在編譯函式時使用 C 呼叫約定。
volatile sig_atomic_t death_signal = 0;
extern "C" void cleanup(int signum) {
death_signal = signum;
}
int main() {
bind(...);
listen(...);
signal(SIGTERM, cleanup);
while (int fd = accept(...)) {
if (fd == -1 && errno == EINTR && death_signal) {
printf("Caught signal %d; shutting down\n", death_signal);
break;
}
// ...
}
}