linux c++ 进程间信号的发送与接收

来源:互联网 发布:淘宝儿童女模特名字 编辑:程序博客网 时间:2024/05/16 15:54

信号不仅可以用于事件的异步处理,同时也可以用作数据传输,一者用于接收数据的进程需要安装信号处理函数,专门用于接收信号,二者用于给指定的进程发送信号

发送信号的进程是:

/* * main.cpp * *  Created on: Jul 15, 2014 *      Author: john */#include<signal.h>#include<stdlib.h>#include<iostream>#include<string.h>using namespace std;int main(int argc ,char** argv){   union sigval value;   int signum=SIGTERM;   pid_t pid=0;   //initializeing      value.sival_int=0;   //check the param   if(argc!=3&&argc!=5&&argc!=7)   {      cout<<"param error"<<endl;      exit(1);    }   for(int i=0;i<argc;i++)   {      if(!strcmp(argv[i],"-d"))      {         value.sival_int=atoi(argv[i+1]);         continue;      }      if(!strcmp(argv[i],"-s"))      {         signum=atoi(argv[i+1]);         continue;              }      if(!strcmp(argv[i],"-p"))      {        pid=atoi(argv[i+1]);        continue;      }   }   //use the function "sigqueue"  send the signal   if(sigqueue(pid,signum,value)<0)   {       cout<<"error\n";   }  else  {     cout<<"successfully";  } }

接收信号进程是:

/* * main.cpp * *  Created on: Jul 15, 2014 *      Author: john */#include<signal.h>#include<iostream>#include<unistd.h>using namespace std;void handler_sig(int signo,siginfo_t*siginfo,void*pvoid){   cout<<"recv signale:  "<<siginfo->si_signo<<endl;}int main(){    struct sigaction act;    act.sa_sigaction=handler_sig;    act.sa_flags=SA_SIGINFO;    //install signal process    cout<<getpid()<<endl;    sigaction(SIGINT,&act,NULL);    while(1);    return 0;}


0 0
原创粉丝点击