Linux C 进程间的信号通信
来源:互联网 发布:古鹰 知乎 编辑:程序博客网 时间:2024/06/08 20:32
1、信号通信
内核中存在64种信号,即linux 内核可以发送64种信号,命令“kill -l”可以查看
A - 信号的发送:kill、raise、alarm
kill(pid_t pid, int sig)
raise(int sig) 等价于 kill(getpid(), int sig) 即发给自己
附:终止进程 kill 9 进程号 或 raise(9) 终止自己 (9为SIGKILL信号)
alarm(int n) 定时 n 秒
B - 信号的接收:pause、sleep、while
C - 信号的处理:signal
处理哪个信号
以什么方式处理(SIG_IGN忽略,SIG_DFL默认,myfun自定义)
2、getpid() 获得进程 id 号
getppid()获得父进程 id 号
3、exit(0) 等价于 kill(getppid(), 17) 即,向父进程发送 17 信号(SIGCHLD)
4、wait(NULL) 可回收僵尸进程。本身为阻塞函数
代码:
1 #include <stdio.h> //standard input output 2 #include <sys/types.h> //pid_t pid; fork() 3 #include <signal.h> //signal 4 #include <stdlib.h> //exit(0) 否则会有warning警告 5 6 void myfun(int sig) 7 { 8 int i; 9 for(i = 0; i < 5; i++) 10 { 11 printf("sig = %d, i = %d\n",sig,i); 12 sleep(1); 13 } 14 return; 15 } 16 17 void myfun1(int sig) 18 { 19 printf("NOTE: exit() sig = %d\n",sig); 20 wait(NULL); 21 printf("NOTE: child process has been retrieved.\n"); 22 return; 23 } 24 25 int main() 26 { 27 pid_t pid; 28 pid = fork(); 29 if(pid > 0) 30 { 31 printf("parent pid = %d\n",getpid()); 32 int i = 0; 33 signal(10, myfun); 34 //wait(NULL); 回收子进程的僵尸进程。但wait是阻塞函数。等待子进程结束时,后面的代码将无法执行 35 signal(17,myfun1); 36 while(1) 37 { 38 printf("parent process i = %d\n",i); 39 sleep(1); 40 i++; 41 } 42 } 43 if(pid == 0) 44 { 45 printf("child pid = %d, parent pid = %d\n", getpid(), getppid()); 46 sleep(3); 47 kill(getppid(),10); //getppid()获取父进程id。10为SIGUSR1信号 48 sleep(3); 49 exit(0); //等价于 kill(getppid(),17)。17 为 SIGCHLD信号 50 } 51 return 0; 52 }
执行:
- linux进程间的通信(C):信号
- linux进程间的通信(C):信号
- Linux C 进程间的信号通信
- Linux的进程间通信(信号)
- Linux进程间的通信方式:信号
- Linux 进程间通信 信号
- linux进程间通信--信号
- Linux进程间通信--信号
- Linux进程间通信 -- 信号
- Linux进程间通信-信号
- Linux进程间信号通信
- 步步LINUX C--进程间通信(二)信号
- Linux 进程间通信 --- 信号通信 --- signal
- linux进程间通信-信号通信
- linux进程间通信-信号通信
- 唯快不破:Linux 进程间通信 --- 信号通信
- 信号--进程间的通信
- 进程间的信号通信
- 汇编语言实现简单的计算器
- 软件工程(C编码实践篇)学习总结
- LinkedHashMap图解--转载
- Spark2.1.1<IDEA使用SBT或者Maven构建spark程序>
- 20170615
- Linux C 进程间的信号通信
- 生成器
- Pycharm的激活
- [机器学习入门] 李宏毅机器学习笔记-14 (Unsupervised Learning: Linear Dimension Reduction;无监督学习:线性降维)
- 解决因为手机设置字体大小导致h5页面在webview中变形的BUG
- 《汇编语言程序设计教程》人民邮电出版社第二版习题及参考答案
- C++标准库笔记:算法--min/max/swap/iter_swap
- 百度编辑器UEditor常用设置函数大全
- Together项目IOS平台开发11