进程间通信 一

进程间的通信方式有信号、管道和FIFO、共享内存、消息队列、文件锁、信号量。

1.信号

信号的来源有:

硬件来源,如按下"ctrl C",

软件来源,如发送信号的kill(),raise(),alarm()等系统函数发送的信号。

进程对信号的处理:

忽略信号,捕捉信号(为捕捉到的信号指定信号处理函数),执行系统默认处理方式(一般是终止进程)。

信号处理函数signal

信号的处理一般用signal函数,它用来设置进程在接收到信号时的动作。

signa的声明如下:

      #include <signal.h>

       typedef void (*sighandler_t)(int);

       sighandler_t signal(int signum, sighandler_t handler);

如果handler不是函数指针,则signum必须是SIG_IGN(忽略信号)或SIG_DFL(则按照默认的的方式处理信号)。

否则,signum设置为具体的信号值,signal会把handler设为指定的信号值的处理函数。

    #include<stdio.h>
    #include<signal.h>
    void handle(int sig)
    {
        printf("recv signal:%d\n",sig);
    }

    int main()
    {
        while(1)
        {
            signal(SIGINT,handle);
        }
    
        return 0;
    }

当按下"cttrl C"时,程序就打印recv signal:2

发送信号的函数

信号的发送:

只有具有root权限的进程才能向其他任意进程发送信号,一般的进程只能向具有相同uid和gid的进程发送信号。

常用的信号的发送函数主要有:kill、raise、alarm、setitimer、abort等。

kill函数

kill()函数用来向指定的进程发送一个信号,kill()的函数声明如下:

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

       int kill(pid_t pid, int sig);

pid为接收信号

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值