快速业务通道

Linux进程通信 发送信号

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-03-30

1. 信号
信号是软中断,用于一个或多个进程之间传递异步信号,如:按下某些终端键,硬件中断等.

2常见信号
SIGHUP 从终端上发出的结束信号
SIGINT 来自键盘的中断信号
SIGQUIT 来自键盘的退出信号
SIGFPE 浮点异常信号

3对信号的处理
<1> 忽略该信号
<2> 执行系统默认动作
<3> 捕捉信号

4发送与捕捉信号
kill()和raise()

---------------kill------------------

头文件
#include<sys/types.h>
#include<signal.h>

函数原型
int kill(pid_t pid,int sig);

函数说明
kill()可以用来送参数sig指定的信号给参数pid指定的进程.参数pid有几种情况:
  pid>0 将信号传给进程识别码为pid 的进程.
  pid=0 将信号传给和目前进程相同进程组的所有进程
  pid=-1 将信号广播传送给系统内所有的进程
  pid<0 将信号传给进程组识别码为pid绝对值的所有进程
sig 信号种类
返回值 执行成功则返回0,如果有错误则返回-1.

---------------raise------------------
头文件
#include<signal.h>
#include<sys/types.h>
函数原型
int raise(int sig)
函数说明
sig 系统信号
向正在执行的程序发送一个信号

5代码
kill父进程向子进程发送信号,
  1. #include<sys/types.h>
  2. #include<sys/stat.h>
  3. #include<signal.h>
  4. #include<unistd.h>
  5. #include<stdio.h>
  6. #include<stdlib.h>
  7. int main()
  8. {
  9. pid_t pid;
  10. pid=fork();
  11. if(pid<0)
  12. {
  13. perror("fork() error\n");
  14. }
  15. if(pid==0)/*子进程*/
  16. {
  17. printf("son process wait for signal!\n");
  18. pause();/*使调用进程挂起,直至捕捉到一个信号*/
  19. }else/*父进程*/
  20. {
  21. sleep(3);
  22. kill(pid,SIGKILL);/*向子进程发送SIGKILL信号*/
  23. printf("parent process send signal!\n");
  24. waitpid(pid,NULL,0);/*等待pid退出*/
  25. printf("son process exit!\n");
  26. exit(0);
  27. }
  28. }


6输出
son process wait for signal! parent process send signal! son process exit!

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号