2.进程间的信号传递

8.23
问题1:linux如何移动一个文件夹到另外一个目录下
mv 目录  新目录
问题2:vi编辑器如果保存并退出:wq.(注意冒号)

https://wenku.baidu.com/view/32cdfa48cc22bcd126ff0ceb.html
的第3题,学习c的信号传递,首先看看信号是什么鬼:
http://www.runoob.com/cplusplus/cpp-signal-handling.html
根据这2份源代码,初见端虞:
发送信号的进程源代码contrl:
#include<stdio.h>
#include<stdlib.h>
#include<signal.h>
int main(int arg,char *args[])
{
        if(arg < 2) //如果没有参数,main函数返回
                return 0;
        else{
                int pid = atoi(args[1]);//第一个参数转化为pid
                printf("pid = %d\n",pid);
                kill(pid,SIGINT);//向指向的pid发送SIGINT信号
                return 0;
        }
}
关于kill函数,可以参考博客:

http://www.cnblogs.com/leeming0222/articles/3994125.html

kill函数并不一定是杀死进程,而是给pid的进程传递信号。

个人理解就是,fork,wait函数都是父子进程的痛心方式,而kill函数则是可以在没有亲属关系的进程间传递信号实现通信。

而这篇博客里面用的waitpid函数,则是父进程等待子进程退出所使用的函数,可以参考博客:

http://blog.csdn.net/kevinhg/article/details/7001719

接收函数的进程recsig:
#include<stdio.h>
#include<stdlib.h>
#include <unistd.h>
#include<signal.h>
int status = 0; //定义一个全局变量,0为打印信息,1位不打印信息                           
void catch_Signal(int Sign)
{
        switch(Sign)
        {
        case SIGINT:
                if(status == 0)//如果status为0,那么设置status为1,否则设置status为0
                        status = 1;
                else
                        status = 0;
                break;
        }
}
int signall(int signo,void (*func)(int))
{
        struct sigaction act,oact;
        act.sa_handler = func;
        sigemptyset(&act.sa_mask);
        act.sa_flags = 0;
        return sigaction(signo,&act,&oact);
}
int main(int arg,char *args[])
{
        signall(SIGINT,catch_Signal);//捕捉SIGINT信号
        while(1)
        {
                if(status) //如果为1,打印字符串
                {
                        printf("hello\n");
                }
                sleep(1);


        }
        return 0;


}
关于sigaction函数,感觉这个函数是比较难深入了解的,里面涉及一个sigaction结构体

可以参考博客:http://blog.csdn.net/hero06206/article/details/7354124 

这2个程序的运行方式是:

recsig运行,一直在循环,这个时候可以通过进程监视器看到这个进程对应的pid

control正常运行,并且 通过args输入recsig进程pid之后,发送SIGINT给recsig

recsig收到信号之后就会触发捕捉信号的函数,输出hellp

但是更加具体的关于信号处理的结构体的话感觉比较复杂,只能先暂时不深入了解,希望以后如果有机会接触,使用多了就会找机会去深入了解他们
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值