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

北京集团 网站建设自己做短视频网站

北京集团 网站建设,自己做短视频网站,为什么建站之前要进行网站策划,网站备案 怎么建站信号是什么一个信号就是一条小消息#xff0c;它通知进程系统中发生了一个某种类型的事件信号是多种多样的#xff0c;并且一个信号对应一个事件#xff0c;这样才能做到收到一个信号后#xff0c;知道到底是一个什么事件#xff0c;应该如何处理#xff08;但是要保证必…信号是什么一个信号就是一条小消息它通知进程系统中发生了一个某种类型的事件信号是多种多样的并且一个信号对应一个事件这样才能做到收到一个信号后知道到底是一个什么事件应该如何处理但是要保证必须识别这个信号信号的种类使用kill-l命令查看信号种类一共62种其中1~31是非可靠信号34~64是可靠信号(非可靠信号是早期Unix系统中的信号后来又添加了可靠信号方便用户自定义信号这二者之间具体的区别在下文中会提到)信号的生命周期产生》》进程中的注册》》进程中的注销》》捕获处理信号的产生硬件事件举例如果一个进程试图除以0那么内核就发送给它一个SIGFPE信号(序号8)如果一个进程执行一条非法指令那么内核就发送给它一个SIGILL信号(序号4)如果进程进行非法存储器引用(野指针、段错误)内核就发送给它一个SIGSEGV信号(序号11)软件事件举例ctrlc 中断信号——20) SIGTSTPctrl| 退出信号——3) SIGQUITctrlz 停止信号——2) SIGINTkill命令kill -signum pid当kill命令不带-signum参数时(kill pid)默认的信号是15) SIGTERM而kill -9 pid则是一个强大的“强杀”命令能杀死kill pid杀不掉的处于T状态的进程int kill(pid_t pid, int sig);kill命令的系统调用接口(在代码中使用kill)#include 示例 #include 运行结果 ubuntuVM-0-7-ubuntu:/home/zeno/c_practice$ ./217_kill Quit (core dumped)int raise(int signum);raise是一个库函数(#include signal.h)作用是发送信号到调用这个函数的进程/线程在单线程程序中它等效于kill(getpid(), sig);也就和上面的示例一样在多线程程序中它等效于pthread_kill(pthread_self(), sig);void abort();abort是一个库函数(#include stdlib.h)作用是造成进程异常中止在进程中调用abort()就相当于调用了raise(3)unsigned int alarm(unsigned int seconds);alarm是一个系统调用接口(#include unistd.h)在seconds秒后会将SIGALRM信号传递到调用进程信号的注册在pcb中有一个未决(pending)信号集合(未决(pending)的意思是信号产生了但还没有决定怎么做)信号的注册就是指在这个pending集合中标记对应信号数值的二进制位为1上面的话有些难以理解我们先来看看在linux内核源码里一个进程的信号是如何保存的在linux内核源码sched.h中的task_struct结构体里有这样一段关于信号的内容/* signal handlers */上面最后一行的sigpending结构体定义在signal.h中struct 这里的signal就是用来做信号标记的给一个进程发送一个信号说白了就是在signal里标记一下这个信号曾经来过那么signal是如何进行标记的呢还得继续了解一下sigset_t这个结构体在bits/sigset.h中进行了以下定义/* A sigset_t has a bit for each signal. */ 注这里的__sigset_t其实就是sigset_t只是一个类型名的重定义在这个结构体中只有一个数组成员这个数组里存放着一些数作为位图位图的每一个二进制位就代表了一种信号0表示未曾收到这个信号1表示已经收到这个信号这里需要注意的是真正存放信号的是数组中某个数的某个二进制位数组的存在只是因为单独一个数的二进制位存不下这么多种类的信号现在我们就可以理解当使用上述方式对某一个进程发送一个信号时操作系统就会将该进程对应的pending集合中表示相应信号的位图的二进制位由0改为1但是非可靠信号和可靠信号的注册还有一点区别为了理解这种区别我们还应该了解一下list_head链表和signal.h中的sigqueue结构体list_head是linux内核提供的一个用来创建双向循环链表的结构由于这个结构是没有数据域的所以较为复杂在这里不做深究有兴趣可以通过这篇博客详细了解我们需要知道的是内核通过一个以list为表头的链表将所有产生的信号都串在了一起链表中的每个节点的结构是一个sigqueue/* 这个结构体保存信号所携带的信息现在我们就可以对非可靠信号和可靠信号的区别有一定的了解了1~31非可靠信号的注册当试图对一个进程发送一个非可靠信号时若发现位图上对应的位为0则置为1并在list_head链表里加入一个sigqueue节点若发现位图上对应的位已经为1则直接返回。简单地说就是若信号还未注册则注册一下若已经注册则什么都不做34~64可靠信号的注册当试图对一个进程发送一个可靠信号时若发现位图上对应的位为0则置为1并在list_head链表里加入一个sigqueue节点若发现位图上对应的位已经为1对该位不进行操作但依旧在链表里加入一个节点。也就是说每次对进程发送一个可靠信号时不管该进程之前是否收到过相同的信号总是会在list_head链表里加入sigqueue节点对于信号来说位图只是用来标记有没有待处理信号的而节点才是信号真正注册的信息信号的注销看上文中信号的生命周期会发现在处理信号之前会先销毁信号的信息信号注销存在的目的就是为了抹除信号存在的痕迹防止对同一个信号进行多次处理删除要处理的信号sigqueue节点若信号是非可靠信号则直接将位图置0非可靠信号在没有处理之前只会注册一次若信号是可靠信号则删除后需要判断是否还有相同节点没有的话才会重置位图为0信号的捕获处理在学习信号的捕获和处理之前我们还需要了解一下信号的阻塞信号的阻塞信号的阻塞就是阻止一个信号的抵达当一种信号被阻塞时它仍可以被发送但是产生的待处理信号不会被接收直到进程取消对这种信号的阻塞在pcb中有一个阻塞信号集合blocked位图实现方式与pending相同凡是添加到这个集合中的信号都表示需要阻塞暂时不处理那么该如何实现对一个进程的某个信号进行阻塞呢我们可以通过sigprocmask函数显式地阻塞和取消阻塞选择的信号#include 参数中的how表示了当前要对blocked集合进行的操作它的值可从下面三个宏定义中选择一个填入SIG_BLOCK添加set中的信号到blocked中blocked blocked | setSIG_UNBLOCK从blocked中删除set中的信号blocked blocked ~setSIG_SETMASKblocked set在这个函数中如果oldset非空blocked位图以前的值会保存在oldset中捕获信号与处理信号接着我们就可以来研究一下捕获信号当内核准备将控制传递给一个进程时它会检查该进程的未被阻塞的待处理信号的集合也就是存在于pending集合中同时又不存在于blocked集合中pending ~blocked如果这个集合为空通常情况下那么内核将控制传递到该进程中的下一条指令里然而如果该集合是非空的那么内核会选择集合中的某个信号通常是序号最小的信号并且强制该进程接收该信号收到这个信号会触发进程的某种行为。一旦进程完成了这个行为那么控制就传递回该进程中的下一条指令这里的“行为”就是进程对信号的处理处理的实现是调用一个信号处理函数signal#include 这里的sighandler_t是一个函数指针类型signal函数的第一个参数就是信号的序号我们就可以通过第二个参数来改变处理信号signum的方式如果handler是SIG_IGN那么忽略类型为signum的信号如果handler是SIG_DFL那么类型为signum的信号行为恢复为默认行为在其它情况下handler是一个用户定义的函数的地址也就是指向一个信号处理程序的函数指针只要进程收到一个类型为signum的信号就会调用这个函数需要注意的是在所有信号中有两个信号不可被阻塞不可被自定义修改处理方式也不可被忽略这两个信号分别是9) SIGKILL 和 19) SIGSTOP一般情况下对于信号的捕获和处理都是一起被提到的上文中对“捕获”和“处理”的分界可能并不是特别准确在《深入理解计算机系统》中对捕获信号和处理信号的定义如下调用信号处理程序称为捕获信号执行信号处理程序称为处理信号现在我们通过一个具体的例子来感受一下信号的阻塞与接触阻塞的操作和信号的捕获处理以及可靠信号与非可靠信号的区别#include 运行程序并分别通过ctrlc和kill命令多次发送2号和40号信号zenoVM-0-7-ubuntu:~$ ./mask presse enter to continue: ^C^C^C^C^C^C^C^C^C^C zenoVM-0-7-ubuntu:~$ ps -ef | grep mask | grep -v grep zeno 29043 27880 0 14:09 pts/10 00:00:00 ./mask zenoVM-0-7-ubuntu:~$ kill -40 29043 zenoVM-0-7-ubuntu:~$ kill -40 29043 zenoVM-0-7-ubuntu:~$ kill -40 29043 zenoVM-0-7-ubuntu:~$ kill -40 29043可以看到对于该进程不论是非可靠信号(2)还是可靠信号(40)都被阻塞导致无法处理但是接下来按下回车所有阻塞都会被解除zenoVM-0-7-ubuntu:~$ ./mask presse enter to continue: ^C^C^C^C^C^C^C^C^C^C receive a signal:40 receive a signal:40 receive a signal:40 receive a signal:40 receive a signal:2在这里我们就可以发现虽然信号2和信号40都曾发送多次但是只有信号40也就是可靠信号被处理了多次而信号2也就是可靠信号只调用了一次信号处理函数这也就印证了我们上文中所提到的可靠信号与非可靠信号的区别至此我们就已经大致了解了什么是进程信号和信号的工作过程
http://wiki.neutronadmin.com/news/347828/

相关文章:

  • 手机微信官方网站成全视频免费观看在线看第6季动漫
  • 网站之间如何交换友情链接医疗产品网站建设
  • 成都建设网站专业公司推广产品最好的方式
  • 网站开发工程师简介河南网站建设哪家公司好
  • 网站开发公司的做得好的企业网站
  • 简单的企业小网站河南网站建设公司排名
  • 网站备案号 链接广告制作专业
  • 家纺公司网站模版中国建设银行江西分行网站首页
  • 手机网站设计公司可去亿企邦网站logo怎么修改
  • 网站关键词如何设置九江专业网站建设
  • 企业电子商务网站建设问题宁波百度seo点击软件
  • 鹰潭做网站wordpress密码无法重置密码
  • 延吉网站开发公司郑州区块链数字钱包网站开发公司
  • 郑州有哪些搞网站开发的公司百度公司简介介绍
  • html5怎末做意见反馈网站东莞网站推广及优化
  • 国内做贵金属返佣比较多的网站美容评测网站建设分析报告
  • 嘉兴市南湖区城乡规划建设局网站专门网页制作工具有
  • 总部基地网站建设公司seo优化技术培训中心
  • 接网站建设单子注意事项七牛怎么做网站服务器
  • 怎么制作网站网页免费设计app的网站建设
  • 建设银行网站注册不了一键生成app的方法
  • 网站开发所需经费杭州外贸建站公司
  • 做简历比较好的网站福田做网站联系电话
  • 做境外网站贵阳自助建站软件
  • 陕西建设分行网站设计公司的网站详情
  • 网站建设管理与维护中企动力官方网站
  • 建设网站需要多少钱济南兴田德润地址集团门户网站建设
  • 网站设计一般什么字体网站彩票怎么做
  • 网站导航栏设计步骤西宁市解封最新消息今天
  • 会议专属网站平台建设报价单给人做网站能赚钱吗