首页 > 系统相关 >进程间的通信(信号通信)

进程间的通信(信号通信)

时间:2024-06-05 18:56:34浏览次数:22  
标签:pid 通信 发送 信号 进程 SIGTERM include

进程间的通信(信号通信)

进程的信号通信是操作系统中进程间通信(IPC)的一种方式,它允许一个进程向另一个进程发送一个信号,从而改变另一个进程的状态或执行某个操作。信号是异步的,意味着信号的发送和接收并不依赖于接收进程的执行状态。

信号通信的基本概念

  1. 信号类型:操作系统定义了一系列的信号,如SIGINT(由中断字符(通常是Ctrl+C)产生)、SIGTERM(请求终止程序)、SIGSEGV(非法内存访问)等。
  2. 信号处理函数:进程可以指定一个信号处理函数来响应某个信号。当信号被发送时,操作系统会中断接收进程的执行,并调用相应的信号处理函数。
  3. 发送信号:进程可以使用kill系统调用来向另一个进程发送信号。进程还可以使用raise系统调用来给自己发送信号。
  4. 信号阻塞:进程可以选择阻塞某些信号,即暂时不接收这些信号。

发送信号(使用kill

#include <stdio.h>  
#include <stdlib.h>  
#include <unistd.h>  
#include <signal.h>  
  
int main() {  
    pid_t pid; // 目标进程的PID  
  
    // 假设我们有一个进程ID为target_pid的进程  
    pid = 12345; // 替换为实际的进程ID  
  
    // 发送SIGTERM信号给目标进程  
    if (kill(pid, SIGTERM) == -1) {  
        perror("kill");  
        exit(EXIT_FAILURE);  
    }  
  
    printf("SIGTERM信号已发送给进程%d\n", pid);  
  
    return 0;  
}

接收信号并处理(设置信号处理函数)

#include <stdio.h>  
#include <stdlib.h>  
#include <unistd.h>  
#include <signal.h>  
  
// 信号处理函数  
void handle_sigterm(int signum) {  
    printf("接收到信号%d,开始清理并退出...\n", signum);  
  
    // 在这里执行清理操作,如关闭文件、释放资源等  
  
    exit(0); // 退出程序  
}  
  
int main() {  
    // 设置SIGTERM信号的处理函数  
    if (signal(SIGTERM, handle_sigterm) == SIG_ERR) {  
        perror("signal");  
        exit(EXIT_FAILURE);  
    }  
  
    // 模拟进程正在运行  
    while (1) {  
        printf("进程正在运行...\n");  
        sleep(1);  
    }  
  
    return 0; 
}

在这个例子中,我们首先定义了一个信号处理函数handle_sigterm,它会在接收到SIGTERM信号时被调用。然后,我们使用signal函数将SIGTERM信号的处理函数设置为handle_sigterm。最后,我们进入一个无限循环来模拟进程正在运行。当SIGTERM信号被发送到该进程时,handle_sigterm函数会被调用,然后程序会执行清理操作并退出。

如果代码用法有什么问题,请将问题发至网易邮箱 [email protected],作者将及时改正,欢迎与各位老爷交流讨论。

麻烦三连加关注!!!!

比心

标签:pid,通信,发送,信号,进程,SIGTERM,include
From: https://www.cnblogs.com/zkbklink/p/18233593

相关文章

  • TCP协议网络通信
    TCP协议网络通信目录TCP协议网络通信头文件/宏定义客户端服务器验证结果客户端服务器头文件/宏定义#include<stdio.h>#include<stdlib.h>#include<string.h>#include<arpa/inet.h>#include<netinet/in.h>#include<sys/types.h>#include<sys/socket.h>#includ......
  • STM32学习(USART通信协议)
            本文章时本人根据江科大视频所记录的笔记,希望对大家的学习能提供帮助。1.通信接口通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统(stm32内部芯片无法得到的数据,需要连接外部芯片获取)通信协议:制定通信的规则,通信双方按照协议规则进行数据收发USAR......
  • Spring家族中的消息通信解决方案
    相信大家对消息通信架构以及各种消息中间件应该都不陌生。在分布式系统的设计和开发过程中,消息通信是用于实现系统解耦、提高扩展性的一大技术体系。而业界关于如何实现消息通信系统也有很多解决方案和对应的开发框架。不知道你有没有发现,在我们每天都在使用到Spring框架中,实际......
  • 微信小程序(uniapp)页面之间通信
    前言开发微信小程序,页面与页面之间少不了数据通信,一起来看看有哪些方法。以下是本篇文章正文内容,下面案例可供参考一、跳转路径?拼接参数适合数据量小的情况,如数据量大的情况不建议此方式。注意:如传递了number类型数据,接收回来的数据会转换成string类型/**A.vue**/......
  • 傅里叶能否还原出原始的所有信号频率
    傅里叶变换是一种强大的数学工具,用于将时间域的信号转换为频率域的表示。它可以帮助我们分析和理解信号的频率成分。然而,是否能够完全还原出原始信号的所有频率成分取决于几个重要因素:1. 采样定理(Nyquist-Shannon采样定理)采样率:傅里叶变换能够准确还原信号的前提是信号的采样......
  • 如果某一段信号某个频率信号突然消失了,傅里叶变换能否反应出这种变化
    傅里叶变换在处理和分析信号的频率成分方面非常强大,但它有一个重要的局限性,即它假设信号是时间无限长且不变的。这意味着傅里叶变换在处理非平稳信号(即频率成分随时间变化的信号)时,可能不能很好地反映出频率成分的突变。检测频率成分的变化如果某段信号中的某个频率成分突然消失,......
  • 微弱电流信号检测注意事项
    1微弱信号检测挑战        电介质吸收,泄露,表面污染,稳定性,湿度,静电耦合,板材,焊膏材料,输入偏置电流,噪声,失调漂移,输出摆幅,补偿,接地噪声,电力线噪声,辐射噪声,摩擦电等。2电介质吸收   2.1电容模型        图1显示了一个非理想电容的等效模型。电阻Rp代表绝......
  • 低代码智能通信:腾讯云短信助力,快速构建高效消息应用
    前言​ 随着信息技术的飞速发展,现代社会对信息传达的及时性、准确性与便捷性要求越来越高。尤其在移动互联网时代,用户对于服务的体验要求不断提升,这促使各类网站、APP、小程序等服务平台必须持续优化其交互方式,以满足用户日益增长的需求。​ 在此背景下,短信作为一种成熟、稳定且......
  • 线程与进程的实现
    目录1.线程的实现方式1.用户级线程(User-LevelThreads,ULTs)2.内核级线程(Kernel-LevelThreads,KLTs)2.线程的具体实现2.1用户级线程的实现2.2内核级线程的实现3.线程的创建与终止4.进程的创建与终止5.进程同步与互斥6.进程通信总结1.线程的实现方式 ......
  • 利用进程池给客户端传文件
    主函数#include<func.h>#include"process_pool.h"#include"server.h"#include"transferFd.h"#defineEVENTSNUM100intmain(intargc,char*argv[]){//ipportprocessNumif(argc!=4){error(1,errno,"......