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

西安网站建设是什么福州seo推广外包

西安网站建设是什么,福州seo推广外包,平面设计接单攻略电子书,wordpress feed 地址文章目录 一、 signal 函数#xff1a;用户自定义捕捉信号二、信号的产生1. 通过中断按键产生信号2. 调用系统函数向进程发信号2.1 kill 函数#xff1a;给任意进程发送任意信号2.2 raise 函数#xff1a;给调用进程发送任意信号2.3 abort 函数#xff1a;给调用进程发送 6… 文章目录 一、 signal 函数用户自定义捕捉信号二、信号的产生1. 通过中断按键产生信号2. 调用系统函数向进程发信号2.1 kill 函数给任意进程发送任意信号2.2 raise 函数给调用进程发送任意信号2.3 abort 函数给调用进程发送 6 号信号 3. 软件条件产生信号alarm 函数闹钟时间后发送 14SIGALRM 号信号 4. 硬件异常产生信号4.1 除08 SIGFPE4.2 野指针11 SIGSEGV 三、信号保存的细节1. core 和 term2. waitpid 中status 第八位的 core dump 标志位 接下篇 kill -l 可以查看所有信号 其中前面的数字就是信号后面的大写英文就是信号名称实际就是宏。 我们需要关注的是 1~31 号普通信号关注他们有没有产生可以用 0 或者 1 表示。 所以进程的 pcb 中需要对产生的信号先用 位图 保存起来再按照一定的顺序去处理他们。 我们所谓发送信号本质其实就是写入信号直接修改特定进程的信号位图中的特定比特位0 / 1。位图中比特位的位置是信号的编号比特位的内容表示是否收到该信号。 无论后面有多少种信号产生的方式最终都必须要让 OS 来完成最后发送 / 写入的过程。 man 7 signal查看所有信号详细信息 一、 signal 函数用户自定义捕捉信号 #include signal.htypedef void (*sighandler_t)(int);   sighandler_t signal(int signum, sighandler_t handler);   参数 signum 信号编号   参数 handler 用户自定义处理动作在 signum 信号发生时触发。 使用举例 // 自定义方法 // signo特定信号被发送给当前进程的时候执行handler方法的时候要自动填充对应的信号给handler方法 // 我们甚至可以给所有的信号设置同一个处理函数 void handler(int signo) {std::cout get a singal: signo std::endl;// exit(2); }int main() {// signal(SIGINT, handler);// signal(SIGQUIT, handler);signal(2, handler); // 2ctrlcsignal(3, handler); // 3ctrl\while(true){std::cout 我是一个进程我正在运行 ..., pid: getpid() std::endl;sleep(1);}return 0; }1. 2号信号进程的默认处理动作是终止进程 2. signal 可以进行对指定的信号设定自定义处理动作 3. signal(2, handler)调用完这个函数的时候handler方法没有被调用只是更改了2号信号的处理动作。 4. 那么handler方法在当2号信号产生的时候才会被调用 5. 默认我们对2号信号的处理动作终止进程我们用signal(2, handler) 我们在执行用户动作的自定义捕捉不是每个信号我们都可以自定义捕捉的比如 9 就不行。是 OS 规定的二、信号的产生 1. 通过中断按键产生信号 比如用户按下 ctrlc键盘输入产生一个 硬件中断用电信号将中断号写入寄存器系统再根据中断号去中断向量表中查找然后 OS 再从键盘中去读取数据看是键盘哪些位置被摁下。被 OS 获取后解释成信号发送给目标前台进程。 2. 调用系统函数向进程发信号 2.1 kill 函数给任意进程发送任意信号 头文件 #include signal.hint kill(pid_t pid, int sig);   参数 pid 进程pid   参数 sig 信号 2.2 raise 函数给调用进程发送任意信号 头文件 #include signal.hint raise(int sig);   参数 sig 信号 2.3 abort 函数给调用进程发送 6 号信号 头文件 #include stdlib.hvoid abort(void); 进程收到 6 号信号就会终止即使可以被用户捕捉到也会完成终止。 3. 软件条件产生信号 SIGPIPE也是一个由软件条件产生的信号 alarm 函数闹钟时间后发送 14SIGALRM 号信号 默认动作是终止Term当前进程 头文件 #include unistd.hunsigned alarm(unsigned seconds);   参数 seconds 时间   返回值 0或者是以前设定的闹钟时间还余下的秒数。比如第一次提前结束在次重新设定时就会返回之前剩余的时间 alarm 函数是一次性的可以利用捕捉器进行 自取 操作达到不断设置闹钟的作用。 使用举例 void myhandler(int signo) {std::cout get a signal: signo count: count std::endl;alarm(1);// exit(0); }int main(int argc, char *argv[]) {std::cout pid: getpid() std::endl;signal(SIGALRM, myhandler);alarm(1); //一次性的while(true){sleep(1);} }alarm 也是有内核数据结构的OS 管理这些内核数据结构每隔一段时间就会去比如说管理 alarm 的最小堆中当堆顶 timestamp 系统当前时间 时就会给这个对应的进程 pid 发送 SIGALRM 信号并把这个闹钟从堆中拿走。 struct alarm {int timestamp; // curr 设置的seconds// ...进程 pid ...等等 };4. 硬件异常产生信号 硬件异常被硬件以某种方式被硬件检测到并通知内核,然后内核向当前进程发送适当的信号。 4.1 除08 SIGFPE SignalValueActioncommentSIGFPE8CoreFloating point exception 例如当前进程执行了除 0 的指令CPU的运算单元会产生异常内核将这个异常解释为 SIGFPE 信号发送给进程。 状态寄存器用比特位表示状态其中有一位就是反映本次计算是否有溢出问题。 出现除 0 后溢出标志位被置 1os 发现后立即将 相应进程 pcb 中发送 8号 信号。 4.2 野指针11 SIGSEGV SignalValueActioncommentSIGSEGV11CoreInvalid memory reference 再比如当前进程访问了非法内存地址MMU 会产生异常内核将这个异常解释为 SIGSEGV 信号发送给进程。 虚拟地址 通过页表 转换访问到物理内存这个过程其实是软硬件结合的方式完成的。这个页表的 KV 转换过程就是由硬件 MMU 完成的。 MMU内存管理单元被集成在 CPU 内转换时只需要把虚拟地址导入到 MMU 这个硬件中用这个硬件转。 举例 // 一个野指针问题 int *p nullptr; p* 100;分析上述代码当我们赋值给指针为 nullptr 时p 里面放的是 0 或者 nullptr*p 代表的就是虚拟地址空间中的 0 号地址我们想将 100 写入 0 号地址但这个地址我们没有申请过他也不允许我们访问所以造成了野指针 / 悬垂指针问题。 其实*p 100第一步并不是写入而是首先进行虚拟地址到物理内存的转换。 没有映射MMU 硬件报错有映射但是没有权限MMU 直接报错OS 接收到报错后传递给 CPU 中的一个寄存器找到相应进程的 pcb 对其发送 11号 信号。 三、信号保存的细节 1. core 和 term 查看信号的 Action 栏有 core 和 term 两种。 他们有什么不同呢 term 终止的就是终止没有多余的动作。 core 终止会先进行核心转储再进行终止。 进程在异常的时候OS 可以将该核心代码部分进行 核心转储将内存中进程的相关数据全部 dump 到磁盘中。核心转储的目的是方便异常后进行调试。 一般核心转储文件在云服务器上确实看不到而是云服务器默认是关闭这个功能的ulimit -a 可以查到 core_file_size 大小是0即关闭的按照提示 ulimit -c [数值] 设置大小即可打开核心转储功能数值设为 0 就是关闭。 当程序异常时我们不知道哪里出了问题。有如下解决方法称作 事后调试 -g 生成可执行程序使用 gdb 命令打开调试模式 命令行中输入core-file core.xxxx (xxxx 为相应的核心转储生成文件)就会出现报错原因的详细信息和报错位置 既然核心转储那么方便为什么云服务器要关闭这个功能呢 Linux环境根据使用目的可以分为开发环境、测试环境、生产环境 云服务器属于生产环境生产环境是默认关闭核心转储的按照 CPU 的运行速度错误的代码在短时间内可以造成大量的 core. 文件磁盘写满甚至系统崩溃都是有可能的所以生产环境下一般都是将这个功能关闭的。2. waitpid 中status 第八位的 core dump 标志位 这里的 core dump 标志位就是用来记录是否有 core dump 出现的。 接下篇 进程信号篇Ⅱ信号的阻塞及保存sigset_t, sigprocmask, sigpending、信号的处理、信号的捕捉sigaction 进程信号篇Ⅲ可重入函数、volatile关键字、SIGCHLD信号 如果本文对你有些帮助请给个赞或收藏你的支持是对作者大大莫大的鼓励(✿◡‿◡) 欢迎评论留言~~
http://www.hkea.cn/news/14293684/

相关文章:

  • 佛山电商网站制作网站快速备案被退回的几种原因分析
  • 宁津做网站android编程开发
  • 服装店网页设计网站模板网站建设人力资源分配
  • 长春网站快速优化排名公众号自己做电影网站吗
  • 营销型网站建设教程少女的ppt高清模板免费
  • 溧阳网站优化公关
  • 软件定制开发网站wordpress标题超链接
  • 北辰做网站公司淘宝店铺一年交多少钱
  • 下城区住房和城市建设局网站像wordpress之类的框架
  • 彩票推广网站如何做wordpress新浪微博图床
  • 现在用什么语言做网站网站及系统建设维护
  • 企业网站的建设对于网络品牌的塑造作用wordpress适合百度吗
  • 个人网站备案名字大全建站技术知识
  • 豆芽网站建设 优帮云炫酷的网站开发
  • 熊掌号网站的基础建设费用哪种浏览器可以打开所有网站
  • 网站开发费是无形资产吗淘客网站开发流程
  • 网站结构该怎么做哪个网站做正品女装
  • 慈溪市网站建设深圳市营销型网站建设
  • 如何做网站自适应用html5做的美食网站
  • 湖南省军区强军网网站群建设项目6项目网络图怎么看
  • 机关网站建设的作用网站建设内页
  • 网站各个阶段推广昆明建设网站哪家好
  • 做动画在线观看网站做剧情网站侵权吗
  • wordpress中英文网站模板徐州建设工程交易网站
  • 建造师免费自学网站网站视觉首页怎么做
  • 乐山智顶网站建设企业服务中心官网
  • 淘客网站模板九网互联怎么建设网站
  • 电商网站建设行业现状空间中国网站地址多少
  • 莱芜做网站建设的公司关于做网站的问卷调查
  • 最好的产品网站建设用自己的话回答网络营销是什么