linux进程间的通信机制——信号

1.核心理论

  • 信号:在linux中信号是一个古老的进程间的通讯机制,就像古代烽火台所起到的传递信号的作用一样。

  • 信号处理流程
    信号通讯机制就分为三步:选择信号→发送信号→处理信号

  • 信号类型
    linux系统支持的所有信号均定义在usr/include/asm/signal.h中,其中常见的信号有:
    SIGKILL:杀死进程
    SIGSTOP:暂停进程
    SIGCHLD:子进程停止货结束时用来通知父进程。

2.函数学习:

  • 发送信号函数:
    函数名:kill
    函数原型:int kill (pid_t pid, int sig)
    头文件:sys/types.h signal.h
    功能:发送信号给一个进程
    返回值:成功返回0,失败返回-1或者errno
    参数:pid:要发送信号的进程,sig:发送的信号。

  • 处理信号函数:
    函数名:signal
    函数原型:typedef void(*sighandler_t)(int)
    sighandler_t signal(int signum , sighandler_t handler)
    头文件:signal.h
    功能:设置信号的处理方式
    返回值:成功返回的是处理函数的指针,失败返回的值SIG_ERR
    参数:signum:要处理的信号
    handler:信号的处理方式
    可设置的方式:
    SIG_IGN忽视这个信号,
    SIG_DEL:交给内核处理,
    用户自定义的函数:交给用户处理函数处理

3.信号通信实例

  • 实例中用到的函数
    pause:等待进程发送函数。
    atoi:将字符串转化成整型。

  • 发送进程

#include <sys/types.h>
#include <signal.h>
#include  <stdio.h>

void main(int argc,char *argv[])
{
    pid_t pid;

    pid = atoi(argv[1]);

    kill(pid,SIGINT);

}

注意:关于参数argc和argv[],前者是参数的个数,后者是要传递的参数名argc[0]是函数名,后面才是传递的参数。

  • 处理进程
#include <unistd.h>
#include <signal.h>

void myfunc(int a)
{
    printf("process B recieve SIGINT\n");
}

void main()
{

    signal(SIGINT,myfunc);

    pause();

}

程序的执行过程:
首先打开b(处理函数进程)进程:./bprocess
然后发送信号:kill -n SIGINT b进程的进程号

执行结果:打印出process B recieve SIGINT

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值