进程间通信信号



进程间通信--信号

信号:是有系统内核发出的由于错误内存冲突等原因引起产生的,主要用于控制进程。
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命令类似的功能

猜你喜欢

转载自blog.csdn.net/qq_41784469/article/details/79457539