当前位置: 首页 > news >正文

C 语言进程通信之信号API

1. kill

#include <sys/types.h>
#include <signal.h>int kill(pid_t pid, int sig);
  • pid是接收信号的进程PID,称为目标进程。
  • sig是信号的编号。
示例1 
#include <signal.h>
#include <stdlib.h>int main(int argc, char const *argv[])
{// atoi 将字符串转化为int  argv[1]运行时需传参int id = atoi(argv[1]);// kill(id,9);kill(id,SIGKILL);return 0;
}

2. signal

#include <signal.h>sighandler_t signal(int signum, sighandler_t handler)
  • signum  信号
  • handler 

                        signal(sig, SIG_IGN);        忽略接收的信号

                        signal(sig, SIG_DFL);        执行缺省动作

                        void (*func)(int)                  捕获信号执行func函数

#include <stdio.h>
#include <signal.h>
#include <unistd.h>void handler(int arg)
{printf("收到信号:%d\n",arg);
}int main(int argc, char const *argv[])
{printf("[%d]process\n",getpid());// 忽略信号// signal(SIGUSR1,SIG_IGN);// signal(SIGUSR2,SIG_IGN);// 默认动作(和不写作用一样)// signal(SIGUSR1,SIG_DFL);// signal(SIGUSR2,SIG_DFL);// 自定义信号动作signal(SIGUSR1,handler);signal(SIGUSR2,handler);signal(SIGKILL,handler);signal(SIGSTOP,handler);signal(SIGINT,handler);while (1);return 0;
}

运行:

        kill -SIGUSR1 XXXX

注意:

        SIGKILL, SIGSTOP不能被捕捉和忽略,只能执行缺省动作

3. raise

#include <signal.h>
int raise(int sig);

自己给自己发送信号

参数:
sig: 发送的信号。
返回值:
成功:0
失败:非0

#include <stdio.h>
#include <signal.h>
#include <unistd.h>void handler(int arg)
{static int time = 0;printf("我在打游戏\n");sleep(1);time++;if (time%10 == 0){printf("放下游戏出来搞学习\n");}
}int main(int argc, char const *argv[])
{signal(SIGUSR1, handler);while (1){raise(SIGUSR1);}return 0;
}

4. pause

#include <unistd.h>
int pause(void);

挂起当前进程,可以充当while(1);

http://www.dtcms.com/a/360684.html

相关文章:

  • [线上问题排查]1.数据库死锁全解析与解决方案
  • 算法:插入排序
  • LeetCode 刷题【58. 最后一个单词的长度、59. 螺旋矩阵 II】
  • 【开题答辩全过程】以 基于SSM的拾光咖啡厅管理系统的设计与实现为例,包含答辩的问题和答案
  • Introduction to GIS —— Chapter 4(Raster Data Model)
  • 批量修改用户密码的命令chpasswd
  • FTP - 学习/实践
  • JPEG XS概述
  • 草图大师SketchUp 2025下载安装教程与胚子库插件包安装for SketchUp 2025安装教程
  • 【AI智能体】LLM记账智能体+MCP服务-实现步骤与效果展示
  • 网络流量分析——使用Wireshark进行分析
  • SW - 用装配图的方式组合多个子零件然后转换成为零件,可维护性好
  • DRF快速构建RESTful API指南
  • 告别强化学习?GEPA:用“反思性提示词进化”实现超越的新范式
  • 【机器学习】-torch相关知识01
  • shell 命令拓展二——流程控制
  • springboot项目启动时打印maven打包时间
  • 华秋DFM检查PCB设计缺陷、一键导出Gerber、BOM、坐标文件
  • 平面椭圆转化为三阶Bezier曲线的方法
  • 目标检测算法YOLOv4详解
  • cloudflare 负载均衡器介绍
  • 用 MATLAB 实现遗传算法求解一元函数极值:从代码到实践
  • JS实现默认显示部分文字点击按钮显示全部内容
  • 使用组合子构建抽象语法树
  • 24数学建模国赛C
  • Linux性能调试工具之ftrace
  • 【开题答辩全过程】以 基于Java的城市公交查询系统设计与实现为例,包含答辩的问题和答案
  • 元宇宙与旅游产业:虚实融合的文旅新体验
  • 【代码随想录day 21】 力扣 216.组合总和III
  • 【代码随想录day 22】 力扣 39. 组合总和