进程间通信信号



进程间通信--信号

信号:是有系统内核发出的由于错误内存冲突等原因引起产生的,主要用于控制进程。
1.信号可以被生成捕获响应。常见的有SIGCHLD SIGCHINT
2.响应方式有三种(忽略SIG_IGN)(默认SIG_DFL)(自定义fun)fun是自定义函数指针
fun(int sig)接下来的函数会为我们的自定义函数传递信号值
头文件#include<signal.h> int signal(信号值,响应方式)函数可以改变对于
信号的响应方式。
3.生成信号主要由int kill(pid_t pid,int sig)。在程序中我们可以使用或者在终端中利用
shell,fork,exec等过程完成生成发送信号的操作。成功返回0,但用户只能在属于自己的
进程中发送给属于自己的进程信号,超级用户除外。

程序1:
void fun(int sig)
{
        printf("sig=%d\n",sig);
        signal(SIGINT,SIG_DFL);//将信号处理方式改为默认
}
void main()
{
        signal(SIGINT,fun);
        while(1)
        {
         sleep(2);
      printf("hello\n");
        }
}
该程序简单实现了信号传递响应机制。我们在终端中输入SIGINT(ctrl+c)第一次以fun
方式响应之后,第二次会以默认方式响应


程序2:
int main(int argc,char *argv[])
{
        if(argc!=3)
        {
        printf("argc error\n");
        exit(0);
        }
        int pid=0;
        int sig=0;//SIGINT
        sscanf(argv[1],"%d",&pid);
        sscanf(argv[2],"%d",&sig);
        if(kill(pid,SIGINT)==-1)
        {
        perror("kill error");
        }
        exit(0);
}
该程序实现了和kill命令类似的功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值