博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LINUX信号发送
阅读量:6258 次
发布时间:2019-06-22

本文共 1443 字,大约阅读时间需要 4 分钟。

测试环境:ubuntu 16.0

编译器:       g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609 (查看版本指令:g++ --version)

实验目的: 使用int kill(pid_t pid, int sig); 函数发送信号

实验步骤:子进程发送信号,父进程接收子进程发送的信号进行处理

 

以下为测试代码:

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 9 //铃铛的状态10 #define START 111 #define break 012 13 //响铃状态14 static int ding_status = 0;15 16 void SignalFunc(int sig_num)17 {18 //对信号进行处理19 switch (sig_num)20 {21 case SIGALRM:22 ding_status = 1;23 break;24 }25 }26 27 int main(int argc, char* argv[])28 {29 pid_t pid;30 31 pid = fork();32 switch (pid)33 {34 case -1:35 perror("main()->fork!\n");36 break;37 38 case 0: //子进程向父进程发送消息39 sleep(2); //让父进程先执行等待40 41 int sendStaus = kill(getppid(), SIGALRM);42 if (-1 == sendStaus)43 {44 perror("subProcess send signal fail! \n");45 exit(1);46 }47 break;48 49 }50 51 //父进程注册处理信号52 signal(SIGALRM, SignalFunc);53 54 //阻塞点的作用55 //主要目的:挂起进程等待信号输入56 pause();57 58 if (START == ding_status)59 {60 printf("ding ding ding ding !!!!\n");61 }62 63 return 0;64 }

 

1.运行结果:

reacher@ubuntu:~/projects/proj$ ./main

ding ding ding ding !!!!

 

2.遇到的坑:

不小心写成父进程sleep,子进程发送信号先结束,之后父进程没有接收到任何信号。

忘记了fork() 执行之后,父子谁先结束是由内核决定的,

真正的步骤应该是:

  2.1  子进程进行sleep

  2.2   父进程调用pause()进程进行挂起

     2.3  子进程发送信号,父进程接收信号结束挂起,在注册中查询是否注册该信号,如有存在则执行函数.

 

转载于:https://www.cnblogs.com/ReacherGua/p/7341402.html

你可能感兴趣的文章
Angular - - ngChange、ngChecked、ngClick、ngDblclick
查看>>
JAVA学习第五十九课 — 网络编程概述
查看>>
远程共享文件夹
查看>>
convert2utf8withbom
查看>>
Codeforces Round #336 (Div. 2)A. Saitama Destroys Hotel 水题
查看>>
poj2752 Seek the Name, Seek the Fame(next数组的运用)
查看>>
pgpgin|pgpgout|pswpin|pswpout意义与差异
查看>>
全排列(递归与非递归实现)
查看>>
[转] C/C++中printf和C++中cout的输出格式
查看>>
swift 如何实现点击view后显示灰色背景
查看>>
【Android】3.9 覆盖物功能
查看>>
Plus One
查看>>
Git -- 创建版本库
查看>>
myeclipse 怎么安装与激活
查看>>
Atitit.异步编程的发展历史 1.1. TAP & async/await
查看>>
RTP timestamp与帧率及时钟频率的关系
查看>>
企业门户平台解决方案
查看>>
过滤器入门
查看>>
深入浅出讲解:php的socket通信
查看>>
Photoshop 批量处理图片
查看>>