raise()函数也是发送信号函数,kill()是向指定pid发送信号,raise()函数则只发送信号给当前进程,而不向其他进程发送信号;raise(sig)等价于kill(getpid(),sig)。
1.头文件
#include <signal.h>
2.函数原型
int raise(int sig);
3.参数
sig:需要发送的信号。
4.返回值
成功时,返回 0。失败时,返回非零值。
5.示例:通过raise()函数给当前进程发送信号
| #include <stdio.h>
#include <signal.h> #include <stdlib.h> #include <unistd.h> // 信号处理程序 void handle_signal(int sig) { if (sig == SIGINT) { printf("Caught SIGINT signal. Exiting gracefully...\n"); _exit(0); } } int main() { // 注册信号处理程序 signal(SIGINT, handle_signal); printf("Program is running. Press Ctrl+C or raise a SIGINT signal to terminate.\n"); // 模拟程序持续运行 while (1) { printf("Program is still running...\n"); sleep(2); // 通过 raise() 函数发送 SIGINT 信号给当前进程 if (rand() % 5 == 0) { // 随机条件下触发 SIGINT printf("Randomly raising SIGINT signal...\n"); raise(SIGINT); } } return 0; } |
6.运行结果
| Program is running. Press Ctrl+C or raise a SIGINT signal to terminate.
Program is still running... Program is still running... Program is still running... Program is still running... Randomly raising SIGINT signal... Caught SIGINT signal. Exiting gracefully... |
7.代码解析
handle_signal() 函数定义了如何处理 SIGINT 信号。当程序接收到 SIGINT(例如按下 Ctrl+C 或使用 raise() 触发)时,信号处理程序会打印消息并退出程序。使用 signal(SIGINT, handle_signal) 注册自定义的信号处理程序。rand() 函数用于生成一个伪随机数,将其对 5 取模(rand() % 5)可以生成 0 到 4 之间的整数,只有当结果为 0 时会触发 raise(SIGINT)
178