原创 Linux进程间信号通信

2015-3-8 19:17 1092 21 22 分类: MCU/ 嵌入式 文集: Linux应用程序开发学习
在古老的战场上,作为信号的烽火是最有效,最直接的通讯方式。在Linux系统中,信号(signal)同样也是最为古老的进程间通信机制。
r9utu2gnithsbhkhiv4u0ne155_ed4bc77e8c71135506cbf5464a97972c1425813405.6663.jpg?65032015-03-08%2019:16:45
 
信号类型:Linux系统支持的所有信号均定义在/usr/include/asm/signal.h,其中常见的信号有:
  1. SIGKILL:杀死进程
  2. SIGSTOP:暂停进程
  3. SIGCHLD:子进程停止或结束时用来通知父进程

6.1 发送信号

6.1.1 函数名     kill
6.1.2 函数原形     int kill(pid_t pid, int sig);
6.1.3 函数功能     向进程发送信号
6.1.4 所属头文件      
6.1.5 返回值     成功:返回0  失败:返回-1
6.1.6 参数说明     pid:pid>0,参数指向接收信号的进程     sig:指明要发送的信号
 

6.2 处理信号

6.2.1 函数名   signal  
6.2.2 函数原形    typedef void(*sighandler_t)(int);      
sighandler_t signal(int signum, sighandler_t handler);
6.2.3 函数功能     设置信号的处理方式
6.2.4 所属头文件    
6.2.5 返回值     成功:返回处理函数指针  失败:SIG_ERR
6.2.6 参数说明     signum:要处理的信号  
                  handler:对应信号的处理方式    
  1. SIG_IGN:忽视这个信号(不处理)
  2. SIG_DFL:交给内核来处理
  3. 用户自定义的函数:交给用户自定义的函数来处理  
小实验:
/******A程序********/
#include
#include
#include

void main(int argc, char *argv[])
{
     pid_t pid;
     pid = atol(argv[1]);//将字符型变量转化为整型
     kill(pid, SIGINT);
}
/******B程序********/
#include
#include
#include

void myfunc()
{
     printf("Process B receive SIGINT\n");
}
int main()
{
     signal(SIGINT, myfunc);
     pause();
     return 0;
}
 
注:先运行bsignal.c,然后再运行asignal.c并加上bsignal.c的ID值。
PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户222733 2015-5-18 09:11

十分受用!!!!!!
相关推荐阅读
潇洒哥 2015-07-08 16:01
位操作符的使用技巧
在C语言编程中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作。一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效地提高程序运行的效...
潇洒哥 2015-04-04 17:39
finish shell分析之底层usart
rt_thread的finsh shell系统不愧是调试的一项利器,它可以除了完成一般shell的功能外,甚至还可以自定义命令。这个对功能单一的嵌入式系统来说是十分可贵的。在此我并不想对finsh...
潇洒哥 2015-04-01 21:29
__main() 和 main()
因为我们通常在BOOTLOADER中都已做好了比较细致的初始化工作,包括代码的搬运,所以我们最好别再调用库函数__main(),因为__main()作为ADS集成好的库函数,会对系统进行初始化设置...
潇洒哥 2015-03-26 22:54
RT-Thread学习之scons篇--解析rtconfig.py文件
rtconfig.py文件,主要用于指定编译器以及安装路径。除此之外,该文件中定义了大量的变量,这些变量包括编译选项,汇编选项,链接选项。   import os # toolchain...
潇洒哥 2015-03-26 22:53
RT-Thread学习之scons篇--SConsruct脚本文件解析
       scons的构建文件名称是统一的都称为SConstruct。其是scons所接受的编译脚本主文件。当然为了方便目录的组织,也允许在各个目录下面存放SConscript, 然后最上面S...
潇洒哥 2015-03-26 22:53
RT-Thread学习之scons篇--SConcript文件解析
SConscript文件是用来指定哪些文件会加入编译。先来分析下BSP主目录下的SConscript文件: import rtconfig Import('RTT_ROOT') fro...
我要评论
1
21
关闭 站长推荐上一条 /3 下一条