信号发送

kill 和 raise函数

kill函数参数详解:

实验1 raise和kill 的使用

#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h> //定义信号处理函数
//signo: 进程捕获到的信号
void sig_handler(int signo){
printf("%d, %d occured \n", getpid(), signo);
wait(NULL);
} int main(void)
{
pid_t pid; if(signal(SIGUSR1, sig_handler) == SIG_ERR){
perror("signal error");
} if(signal(SIGUSR2, sig_handler) == SIG_ERR){
perror("signal error");
} sleep(1); printf("向进程自己发送SIGUSR1 和 SIGUSR2 .\n");
raise(SIGUSR1);
kill(getpid(), SIGUSR2); while(1){
sleep(1);
}
}

编译运行:

结论1.1:raise(SIGUSR1) 等价于 kill(getpid(), SIGUSR2) 

结论1.2: 进程可以向自己发送信号

实验2 进程能够自杀吗?

#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h> //定义信号处理函数
//signo: 进程捕获到的信号
void sig_handler(int signo){
printf("%d, %d occured \n", getpid(), signo);
wait(NULL);
} int main(void)
{
pid_t pid; if(signal(SIGUSR1, sig_handler) == SIG_ERR){
perror("signal error");
} if(signal(SIGUSR2, sig_handler) == SIG_ERR){
perror("signal error");
} sleep(1); printf("进程能够自杀吗?\n");
raise(SIGKILL); while(1){
sleep(1);
}
}

编译运行:

结论: 进程可以通过发送9号信号杀死自己

定时器 alarm 和 ualarm

实验3 alarm使用

#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h> //定义信号处理函数
//signo: 进程捕获到的信号
void sig_handler(int signo){ if(signo == SIGALRM){
printf("clock time out \n"); //需要重新设置定时器,使之成为一个周期性触发的定时器
if(0 != alarm(5)){
perror("alarm:5 error");
}
}
} int main(void)
{
pid_t pid;
int cnt=0; if(signal(SIGALRM, sig_handler) == SIG_ERR){
perror("signal error");
} if(0 != alarm(5)){
perror("alarm:5 error");
} while(1){
printf("main -- 1s -- \n");
sleep(1);
if((cnt++) == 13)
alarm(0); } return 0;
}

编译运行:

ualarm:微妙级别的定时器,精读比alarm高

.

最新文章

  1. PDO连接mysql数据库
  2. 关于JavaScript预编译和执行顺序以及函数引用类型的思考
  3. debug和release之间的时间优化问题
  4. 史上最全的Python电子书教程资源下载(转)
  5. selenium 3.0发布
  6. [转载] LinkedIn架构这十年
  7. org.apache.hadoop.hbase.TableExistsException: hbase:namespace
  8. Java 集合深入理解(9):Queue 队列
  9. linux rpm命令
  10. ASP.NET MVC 学习第二天
  11. Mysql安装过程(linux:2.6.18-194.el5,Mysql:)
  12. java文件(文件夹)操作
  13. 安装pybloomfiltermmap 遇到bug
  14. Ajax 异步上传文件
  15. js中的严格模式和非严格模式的比较
  16. 跳跳棋[LCA+二分查找]-洛谷1852
  17. opcache分享
  18. Thinkphp5 多图上传
  19. js中使用cookie
  20. C#中null值属于什么变量类型

热门文章

  1. Vue 3 In Action
  2. npm &amp; config settings
  3. vue router &amp; query params
  4. Android Kotlin 数据驱动模板
  5. 人物传记STEPHEN LITAN:去中心化存储是Web3.0生态重要组成
  6. DBA 的效率加速器——CloudQuery v1.3.2 上线!
  7. glibc内存管理那些事儿
  8. smart-adminx项目导入依赖时,点击reinport时没反应且依赖全部报红的解决办法
  9. C#语言特性及发展史
  10. python使用requests模块下载文件并获取进度提示