Hàm raise() gửi tín hiệu (signal) đến chính tiến trình đang chạy. Hàm xử lý tín hiệu đã đăng ký qua signal() sẽ được gọi. Khai báo trong <signal.h>. Trả về 0 nếu thành công, khác 0 nếu lỗi.
Cú pháp
int raise(int sig);
Tham số: sig – Số hiệu tín hiệu (ví dụ: SIGILL, SIGSEGV, SIGTERM).
Ví dụ
#include <signal.h>
#include <stdio.h>
void handler(int sig) {
printf("Nhan tin hieu: %d\n", sig);
}
int main() {
signal(SIGILL, handler); // Dang ky handler cho SIGILL
printf("Gui tin hieu: %d\n", SIGILL);
raise(SIGILL); // Gui tin hieu den chinh minh
return 0;
}
Kết quả
Gui tin hieu: 4
Nhan tin hieu: 4
Giải thích: Đăng ký handler cho SIGILL (Illegal Instruction). Gọi raise(SIGILL) gửi tín hiệu, handler được gọi in ra số hiệu tín hiệu.
Các tín hiệu phổ biến
| Tín hiệu | Giá trị | Ý nghĩa |
|---|---|---|
| SIGINT | 2 | Interrupt (Ctrl+C) |
| SIGILL | 4 | Illegal instruction |
| SIGSEGV | 11 | Segmentation fault |
| SIGTERM | 15 | Termination request |
| SIGABRT | 6 | Abort từ abort() |
Lưu ý: Xử lý signal phải async-signal-safe (chỉ dùng hàm an toàn trong handler).
printf trong handler chỉ để demo, thực tế nên tránh.