catch signal】的更多相关文章

捕抓信号 如果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,称为捕抓信号. 除了SIGSTOP和SIGKILL进程能够忽略或捕获其他的全部信号. 注:信号可从两个不同分类角度对信号进行分类,1)可靠性方面:可靠信号与不可靠信号:2)与时间的关系上:实时信号与非实时信号.常见的信号1-31都是不可靠信号,都是非实时信号. sighandler和main函数默认使用相同的堆栈空间,sighandler函数返回后自动执行特殊的系统调用sigreturn再次进入内核态.内核态切换到用户态执…
1. 功能 设置某一信号的对应动作 2. 声明 #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); 3. 参数说明 第一个参数signum:指明了所要处理的信号类型,它可以取除了SIGKILL和SIGSTOP外的任何一种信号.  第二个参数handler:描述了与信号关联的动作,它可以取以下三种值:  (1)SIG_IGN 这个…
一.函数描述 #include <signal.h> typedef void (*sighandler_t)(int);sighandler_t signal(int signum, sighandler_t handler); signal()会将接收到的signum信号交给hander(可以是SIG_IGN, SIG_DFL)处理,signal()的功能会跟随着Unix版本的变化而变化. 当这个进程收到这个signum信号后,处理如下: ①如果handler是SIG_IGN,此信号被忽略…
gdb exegdb exe coregdb -p info m TAB ^関数の先頭 info b ^list the breakpoint set args -a test ^引数設定 show args ^引数表示 path directory(‘:’ on Unix, ‘;’on MS-DOS and MS-Windows). ^パス設定show path show environment [varname]set environment varname [=value]unset en…
信号本质上就是一个软件中断,它既可以作为两个进程间的通信的方式, 更重要的是, 信号可以终止一个正常程序的执行, 通常被用于处理意外情况 ,* 信号是异步的, 也就是进程并不知道信号何时会到达 $kill -9 3390 #向PID为3390的进程发送编号为9的信号=>一个两个进程间通信的方式之一 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SI…
Linux信号基础   作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Linux进程基础一文中已经提到,Linux以进程为单位来执行程序.我们可以将计算机看作一个大楼,内核(kernel)是大楼的管理员,进程是大楼的房客.每个进程拥有一个独立的房间(属于进程的内存空间),而每个房间都是不允许该进程之外的人进入.这样,每个进程都只专注于自己干的事情,而不考虑其他进程,同时也不让别的进程看到自己的房间内部.这对于每个进程来说是一…
Linux 进程 在用户空间,进程是由进程标识符(PID)表示的.从用户的角度来看,一个 PID 是一个数字值,可惟一标识一个进程.一个 PID 在进程的整个生命期间不会更改,但 PID 可以在进程销毁后被重新使用,所以对它们进行缓存并不见得总是理想的. 进程表示 在 Linux 内核内,进程是由相当大的一个称为 task_struct 的结构表示的.此结构包含所有表示此进程所必需的数据,此外,还包含了大量的其他数据用来统计(accounting)和维护与其他进程的关系(父和子). struct…
1.什么是信号信号是Linux系统响应某些条件而产生的一个事件,接收到该信号的进程会执行相应的操作. 2.信号的产生1)由硬件产生,如从键盘输入Ctrl+C可以终止当前进程2)由其他进程发送,如可在shell进程下,使用命令 kill -信号标号 PID,向指定进程发送信号.3)异常,进程异常时会发送信号 3.信号的处理信号是由操作系统来处理的,说明信号的处理在内核态.信号不一定会立即被处理,此时会储存在信号的信号表中.处理过程示意图: 由上图中可看出信号有三种处理方式:1)忽略2)默认处理方式…
Linux基于row模式的binlog,生成DML(insert/update/delete)的rollback语句通过mysqlbinlog -v 解析binlog生成可读的sql文件提取需要处理的有效sql  "### "开头的行.如果输入的start-position位于某个event group中间,则会导致"无法识别event"错误 将INSERT/UPDATE/DELETE 的sql反转,并且1个完整sql只能占1行  INSERT: INSERT IN…
一, GNU工具链简介: (1)编译代码步骤: 预处理 -> 编译 -> 汇编 -> 链接: 预处理:去掉注释,进行宏替换,头文件包含等工作: gcc -E test.c -o test.i 编译:   不同平台使用汇编语言不同,汇编将高级语言编译成汇编语言: gcc -S test.c -o test.s 汇编:   将汇编语言翻译成二进制代码: gcc -c test.c -o test.o 链接:   包含各函数库的入口,得到可执行文件: gcc -o test test.c (2…
在上一篇文章(http://www.cnblogs.com/coding-my-life/p/4220128.html)中,提到了libev提供了处理信号的C++ wrap.但我显然接受不了需要进入libev的事件循环(event loop)后才能捕捉到消息的缺点.于是决定依照libev的思路自己写一个C++的wrap. 分析了一下libev的源代码,主要有以下几个要点: sigaction函数只能设置一个C的函数指针作为回调函数,不能回调成员函数.因此需要通过C函数回调成员函数. 回调一个成员…
ev_signal是libev提供的对信号处理的一个模块,基本上是对sigaction函数的一个封装,并将本身是异步的信号转化为同步.ev_signal的使用十分简单: #include <ev.h> #include <stdio.h> static void sigint_cb (struct ev_loop *loop, ev_signal *w, int revents) { puts ( "signal ....." ); } int main(int…
---恢复内容开始--- fork函数 该函数是unix中派生新进程的唯一方法. #include <unistd.h> pid_t   fork(void); 返回: (调用它一次, 它返回 两次 , 它在调用进程(称为父进程)中返回一次, 返回值是新派生进程(称为子进程)的进程ID号 在子进程又返回一次,返回值为0. 因此,返回值本身告知当前进程是子进程还是父进程) 在子进程中为0, 在父进程中为子进程ID, 若出错则为-1: fork有两个典型的用法: 1.一个进程创建一个自身的副本,这…
ping命令的工作原理是: ping命令是用来查看网络上另一个主机系统的网络连接是否正常的一个工具. 他向网络上的另一个主机系统发送ICMP报文,如果指定系统得到了报文,它将把报文原样传回给发送者,这有点像潜水艇的声纳系统中使用的发声装置. 例如,在Linux终端上执行ping localhost命令将会看到以下结果: [root@Oracle9i work]# ping localhost PING Oracle9i (127.0.0.1) 56(84) bytes of data. 64 b…
Sometimes running program in Unix will fail without any debugging info or warnings because of the laziness of programmer.. So if need to find the right place where the program stops and start debugging right from there, set the coredump file size to…
大家都知道MySQL Binlog 有三种格式,分别是Statement.Row.Mixd.Statement记录了用户执行的原始SQL,而Row则是记录了行的修改情况,在MySQL 5.6以上的版本默认是Mixd格式,但为了保证复制数据的完整性,建议生产环境都使用Row格式,就前面所说的Row记录的是行数据的修改情况,而不是原始SQL.那么线上或者测试环境误操删除或者更新几条数据后,又想恢复,那怎么办呢?下面演示基于Binlog格式为Row的误操后数据恢复,那么怎么把Binlog解析出来生成反…
一.编译 gcc的完整编译过程大致为:预处理->编译->汇编->链接 前三个步骤分别对应了-E.-S.-c三个选项. 编译阶段 命令 截断后的产物     C源程序 预处理 gcc -E 替换了宏的C源程序(没有了#define,#include…), 删除了注释 编译 gcc -S 汇编源程序 汇编 gcc -c 目标文件,二进制文件, 允许有不在此文件中的外部变量.函数 链接 gcc 可执行程序,一般由多个目标文件或库链接而成, 二进制文件,所有变量.函数都必须找得到 objdump…
引用自:http://blog.jobbole.com/107759/ gdb 调试 ncurses 全过程: 发现网上的“gdb 示例”只有命令而没有对应的输出,我有点不满意.gdb 是 GNU 调试器,Linux 上的标配调试器.当我看 Greg Law 在 CppCon 2015 上的演讲<给我 15 分钟,我将改变你的对 GDB 的认知>的时候,我想起了示例输出的不足,幸运的是,这次有输出!这 15 分钟太值了. 它也启发我去分享一个完整的 gdb 调试实例,包含输出和每个步骤,甚至钻…
转自:http://velep.com/archives/1032.html 在此之前,开发eCos应用程序时,经常碰到程序挂掉后,串口打印输出一大串让人看不懂的数据.今天才明白,原来这些数据是程序挂掉时的堆栈帧数据(stack frame data). 通过这些堆栈帧数据可以分析出程序当时的运行状态和定位程序哪里出现了问题. 这就是本文要讲的—backtrace()和backtrace_symbols()函数的使用. backtrace()和backtrace_symbols()函数 back…
原文地址 守护进程 传统的后台服务一般作为守护进程(daemon)运行.linux 上创建 daemon 的步骤一般如下: 创建子进程,父进程退出: 调用系统调用 setsid() 脱离控制终端: 调用系统调用 umask() 清除进程 umask 确保 daemon 创建文件和目录时拥有所需权限: 修改当前工作目录为系统根目录: 关闭从父进程继承的所有文件描述符,并将标准输入/输出/错误重定向到 /dev/null. 前 3 个步骤是必须的.一些用来创建 daemon 的第三方库(比如这个)基…
转载地址: http://blog.jobbole.com/107759/ gdb 调试 ncurses 全过程: 发现网上的“gdb 示例”只有命令而没有对应的输出,我有点不满意.gdb 是 GNU 调试器,Linux 上的标配调试器.当我看 Greg Law 在 CppCon 2015 上的演讲<给我 15 分钟,我将改变你的对 GDB 的认知>的时候,我想起了示例输出的不足,幸运的是,这次有输出!这 15 分钟太值了. 它也启发我去分享一个完整的 gdb 调试实例,包含输出和每个步骤,甚…
Preface Environment Cygwin Run in the Windows(Simulation of UNIX) Resource Cygwin Install:http://cygwin.com/install.html Cygwin API:http://cygwin.com/cygwin-api/ Lab 1 Program Layout Content Ex. 2.3 P.25 Exercise 2.3 Use ls -l to compare the sizes of…
转自:http://blog.csdn.net/feixiaoxing/article/details/53980886 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 单循环模式 多线程模式 reactor模式 [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @.com] Python作为一门脚本语言,使用的范围很广.有的同学用来算法开发,有的用来验证逻辑,还有的作为胶水语言,用它来粘合整个系统的流程.不管怎么说,怎么使用python…
1. Linux开机启动 2. Linux文件管理 3. Linux的架构 4. Linux命令行与命令 5. Linux文件管理相关命令 6. Linux文本流 7. Linux进程基础 8. Linux信号基础 9. Linux进程关系 10. Linux用户 11. Linux从程序到进程 12. Linux多线程与同步 13. Linux进程间通信 14. Linux文件系统的实现 15. Linux常用命令 =======================================…
有时程序中有未捕获的异常会导致程序异常的行为甚至导致程序的直接退出. 这对服务器程序来说是不可接受的. 可以使用gdb的catch命令来帮助我们调试异常. 使用gdb捕获异常的扔出点(相当于在扔出异常的地方添加断点): catch throw 使用gdb捕获线程退出(相当于在线程退出的时候添加断点): catch pthread_exit 这样,如果相应的事件发生,gdb就会中断程序的执行, 就可以使用gdb的bt命令来检查出现错误的调用栈了. 更多信息: (gdb) help catch Se…
linux backtrace()详细使用说明,分析Segmentation fault 在此之前,开发eCos应用程序时,经常碰到程序挂掉后,串口打印输出一大串让人看不懂的数据.今天才明白,原来这些数据是程序挂掉时的堆栈帧数据(stack frame data). 通过这些堆栈帧数据可以分析出程序当时的运行状态和定位程序哪里出现了问题. 这就是本文要讲的- backtrace()和backtrace_symbols()函数的使用. backtrace()和backtrace_symbols()…
Command class: aliases ni -- Step one instruction rc -- Continue program being debugged but run it in reverse rni -- Step backward one instruction rsi -- Step backward exactly one instruction si -- Step one instruction exactly stepping -- Specify sin…
在Linux中如何利用backtrace信息解决问题 一.导读 在程序调试过程中如果遇到程序崩溃死机的情况下我们通常多是通过出问题时的栈信息来找到出错的地方,这一点我们在调试一些高级编程语言程序的时候会深有体会,它们通常在出问题时会主动把出问题时的调用栈信息打印出来,比如我们在eclipse中调试java程序时. 当这些换到Linux上的C/C++环境时情况将变的稍微复杂一些,通常在这种情况下是通过拿到出问题时产生的core文件然后再利用gdb调试来看到出错时的程序栈信息,这是再好不过的了,但当…
gdb-example-ncurses http://www.brendangregg.com/blog/2016-08-09/gdb-example-ncurses.html 1. The Problem The bcc collection of BPF tools had a pull request for cachetop, which uses a top-like display to show page cache statistics by process. Great! Ho…
信号的概念 man 7 siganl  查看man手册 信号在我们的生活中随处可见, 如:古代战争中摔杯为号:现代战争中的信号弹:体育比赛中使用的信号枪......他们都有共性:1. 简单 2. 不能携带大量信息 3. 满足某个特设条件才发送. 信号是信息的载体,Linux/UNIX 环境下,古老.经典的通信方式, 现下依然是主要的通信手段. Unix早期版本就提供了信号机制,但不可靠,信号可能丢失.Berkeley 和 AT&T都对信号模型做了更改,增加了可靠信号机制.但彼此不兼容.POSIX…