• 正文
  • 相关推荐
申请入驻 产业图谱

飞凌嵌入式ElfBoard-进程间的通信之信号的发送raise

10小时前
178
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

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)

相关推荐