当前位置: 首页 > wzjs >正文

网站开发与app开发的区别设计网站推荐什么主题

网站开发与app开发的区别,设计网站推荐什么主题,徐州建设企业网站,网站建设如何做好整体色彩搭配信号是由用户,系统或者进程发送给目标进程的信息,以通知目标进程某个状态的改变或系统异常。 进程分为前台进程和后台进程,对于前台进程我们可以输入特殊的终端字符来给它发送信号,比如输入Ctrlc,发送一个中断信号 系…

信号是由用户,系统或者进程发送给目标进程的信息,以通知目标进程某个状态的改变或系统异常。

进程分为前台进程和后台进程,对于前台进程我们可以输入特殊的终端字符来给它发送信号,比如输入Ctrl+c,发送一个中断信号

系统异常,比如浮点异常和非法内存段访问

运行kill命令或者调用kill函数

发送信号

Linux下,一个进程给一个进程发送信号的api是kill函数

int kill(pid_t pid,int sig);

sig是指定的信号,pid是指定的进程

pid>0 信号发送给指定的进程

pid=0. 信号发送给进程组的其他进程

pid=-1 信号发送给除init进程外的所有进程

pid<-1 信号发送给组ID为-pid的进程组中的所有成员

有发送信号,那肯定得有一个接收信号的东西

接收信号

signal系统调用

       typedef void (*sighandler_t)(int);sighandler_t signal(int signum, sighandler_t handler);

signum是信号的种类

这里我们可以写数字也可以写具体的名称

handler是一个函数指针,传入函数名就行

下面实现一个信号的安装和发送

void handle(int v)
{cout << "信号被触发.." << v << endl;
}void demo4()
{int pid = 0;pid = fork();if (pid > 0){// 信号安装signal(SIGUSR1, handle);while (1);}else if (pid == 0){// 发送信号sleep(1);kill(getppid(), SIGUSR1);while (1);}
}

父进程进行信号安装,子进程进行信号的发送

带参信号函数

上面的是简单的信号发送,但是不能带参数,只能是发送一个信号过去

sigaction系统调用

       #include <signal.h>int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact);

安装信号的函数变了,那么发送信号的函数也应该发生变化

  #include <signal.h>int sigqueue(pid_t pid, int sig, const union sigval value);

前两个参数就不用说了,主要是最后一个是一个联合体

  union sigval {int   sival_int;void *sival_ptr;};

填对应的参数就行了

下面来一个带参数的信号发送和接收

void demo5_handel(int v, siginfo_t *info, void *context)
{cout << "v:" << v << endl;cout << "value:" << info->si_value.sival_int << endl;
}void demo5()
{int pid = 0;pid = fork();if (pid == 0) // 子进程,安装{struct sigaction action;action.sa_flags = SA_SIGINFO;action.sa_sigaction = demo5_handel;sigaction(SIGUSR1, &action, NULL);while (1);}else if (pid > 0) // 父进程,发送{sleep(1);union sigval val;val.sival_int = 10000;sigqueue(pid, SIGUSR1, val);while (1);}
}

下面来一个难一点的demo

有ABCD四个进程

A携带数据1000通过SIGUSR1发给进程B

B收到数据以后对数据进行+1操作再次携带数据1001通过SIGUSR2发给进程C

C收到数据以后对数据进行+1操作再次携带数据1002通过SIGRTMIN发给进程D

D收到数据以后对数据进行+1操作再次携带数据1003通过SIGUSR2发给进程A

A收到数据以后将最终的数据打印到控制台

首先我的思想是主进程为A,A创建B进程,B创建C,依此下去,这里我们使用一个信号函数,对于信号的区分我们在代码中理解

 zh

int fatherpid;
int childpid;void handel_(int signo,siginfo_t *info,void *context)
{if(signo==SIGUSR2){if(fatherpid==0){cout<<"进程A收到SIGUSR2信号 value="<<info->si_value.sival_int<<endl;}else {cout<<"进程C收到SIGUSR2信号 value="<<info->si_value.sival_int<<endl;union sigval val;val.sival_int=info->si_value.sival_int+1;sigqueue(childpid,SIGRTMIN,val);}}else if(signo==SIGUSR1){cout<<"进程B收到SIGUSR1信号 value="<<info->si_value.sival_int<<endl;union sigval val;val.sival_int=info->si_value.sival_int+1;sigqueue(childpid,SIGUSR2,val);}else if(signo==SIGRTMIN){cout<<"进程D收到SIGRTMIN信号 value="<<info->si_value.sival_int<<endl;union sigval val;val.sival_int=info->si_value.sival_int+1;sigqueue(pidA,SIGUSR2,val);}}void demo9()//信号作业再次复现
{pidA=getpid();pidB=fork();if(pidB==0){fatherpid=getppid();struct sigaction action;action.sa_flags = SA_SIGINFO;action.sa_sigaction = handel_;sigaction(SIGUSR1, &action, NULL);pidC=fork();childpid=pidC;if(pidC==0){fatherpid=getppid();struct sigaction action;action.sa_flags = SA_SIGINFO;action.sa_sigaction = handel_;sigaction(SIGUSR2, &action, NULL);pidD=fork();childpid=pidD;if(pidD==0){fatherpid=getppid();struct sigaction action;action.sa_flags = SA_SIGINFO;action.sa_sigaction = handel_;sigaction(SIGRTMIN, &action, NULL);while(1);}while(1);}while(1);}else if(pidB>0){childpid=pidB;struct sigaction action;action.sa_flags = SA_SIGINFO;action.sa_sigaction = handel_;sigaction(SIGUSR2, &action, NULL);sleep(3);union sigval val;val.sival_int=10000;sigqueue(pidB,SIGUSR1,val);while(1);}
}

 这里设置了一个父进程id,子进程id的值用来区分信号,比如A进程只有子进程,D进程只有父进程,对于B和C来说不用区分

注意这里的fatherpid和childpid在每个进程中都是独立的,互不干扰,所以在信号函数的判断都是独立的


文章转载自:

http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://00000000.nmfmL.cn
http://www.dtcms.com/wzjs/601562.html

相关文章:

  • 企业的网站建设制作平台营销网站建设专业公司
  • 荆州市城市建设投资开发有限公司网站网站专题欣赏
  • jsp做网站的优点专业做苗木的网站
  • 哈什么网一个网站做ppt手机网页wap
  • 龙口网站建设公司报价中铁三局招聘信息2022
  • 湖南网站设计微信是哪个公司开发的
  • 用dz程序做的电影网站运营主要做什么工作
  • 手机网站布局品牌推广活动策划案例
  • 网上商城平台运营方案湛江seo公司
  • 网站建设好学吗个人网站如何备案
  • 广东做网站公司网络设计报告总结
  • .网站建设的目标物流公司查询平台
  • 个人网站的基本风格是阜南网站建设公司
  • 网站开发需要注意的问题罗湖区网站公司
  • 做一个微信小程序要多少钱搜索引擎优化的方法包括
  • 太阳能公司网站建设多少钱wordpress commentor
  • 制作的网站图片不显示上海网站建设 劲晟
  • 网站备案和不备案的区别wordpress中文备份插件
  • 二级域名可以做不同的网站吗谷歌seo采集
  • 手机网站建设哪个好如何做网站平台
  • 网站建设考级哈尔滨模板建站品牌
  • 微小店网站建设比较好有哪些做简历的好网站
  • 东兴网站建设wordpress登陆后查看
  • tp框架做展示网站昆明著名网站
  • 网站页面结构电商品牌授权网站
  • 做网站要学的技术河南做网站哪个平台好
  • e站注册网站网站被k怎么
  • wordpress做公司网站嘉兴营销型网站
  • 如何提高百度关键词排名站长工具seo优化
  • 网站logo制作软件皖icp备 网站建设