今天碰到一个SIGHUP问题,再复习一遍:

有些信号的默认处理方式为“终止+core”,这里的core表示,进程终止时,会在进程的当前工作目录生产一个core文件,该文件是进程终止时的内存快照,以便以后供debugger调试用。

以下情况不会生产core文件:

(1)为程序设置了set-user-ID并且用户不是程序的所有者;

(2)为程序设置了set-group-ID并且用户不是程序的组所有者;

(3)进程在当前工作目录下面没有写权限;

(4)当前工作目录下已有core文件且进程对该core文件没有写权限;

(5)core文件过大。

各种信号产生条件和默认处理方式描述如下:

SIGABRT     默认处理方式:终止+core;当程序调用abort函数时,会产生该信号。程序异常终止。

SIGALRM     默认处理方式:终止;当由alarm或setitimer函数设置的定时器超时时,会产生该信号。

SIGBUS     默认处理方式:终止+core;经常因为内存错误产生该信号。

SIGCHLD     默认处理方式:忽略;当进程terminate或stopped的时候,该信号会发送给父进程。如果父进程需要知道子进程什么时候终止,父进程必须捕获该信号。通常在该信号的捕获函数中调用wait或waitpid获取子进程的pid和终止状态。

SIGCONT     默认处理方式:忽略/继续;作业控制命令进程继续执行时,该信号发送给进程。如果进程之前已被停止,则该信号的默认处理方式是继续进程的执行;否则,忽略该信号。

SIGFPE     默认处理方式:终止+core;当发生算术错误(如:除零,溢出等)时,产生该信号。

SIGHUP     默认处理方式:终止;当终端界面检测到连接断开时,内核向与控制终端的session leader进程发送该信号(当且仅当终端的CLOCAL标识位没有被设置时,才会发送该信号)。接收信号的session leader可能是后台进程,这与普通终端产生的信号不同,普通终端信号接收者是前台进程组。另外,当控制终端的session leader终止时,SIGHUP信号会发送到前台进程组。因为守护进程没有控制终端,通常不应该接收该信号的,所以这个信号常常被用作守护进程重新读取配置文件的信号。

SIGILL     默认处理方式:终止;当处理器执行了非法指令时,产生该信号。

SIGINT     默认处理方式:终止;当向终端输入终端键(Control+C或DELETE)时,终端产生SIGINT信号。该信号被发送到前台进程组。通常用来终止已运行的进程。

SIGIO     默认处理方式:终止/忽略;该信号用来提供异步IO模式。当有IO可用时,产生该信号通知进程。

SIGKILL     默认处理方式:终止;该信号给超级用户提供了终止任何进程的能力,通常通过kill函数或命令。该信号不能够被忽略或捕获。

SIGPIPE     默认处理方式:终止;当向已经关闭读者的管道写数据时,会产生该信号。同样向未连接的SOCK_STREAM类型的socket写数据时,也会产生该信号。

SIGPOLL     默认处理方式:终止;当指定的事件发生在可选择的设备上时,产生该信号。

SIGPROF     默认处理方式:终止;由setitimer设置的间隔定时器超时会产生该信号。

SIGPWR     默认处理方式:终止;当系统有UPS(Uninterruptible Power Supply,即电池)时,断电后使用电池,当电池电量低时,会产生该信号通知进程在1530秒内关闭。

SIGQUIT     默认处理方式:终止+core;当输入退出键(Control+\)时,终端将会产生SIGQUIT信号,该信号被传送到前台进程组。

SIGSEGV     默认处理方式:终止+core;非法内存引用时,产生该信号。

SIGSTOP     默认处理方式:停止进程;作业控制信号,用来停止进程。该信号不能被忽略或捕获。

SIGSYS     默认处理方式:终止+core;非法系统调用时,产生该信号。

SIGTERM     默认处理方式:终止;kill函数默认发送的信号,用来终止进程。

SIGTRAP     默认处理方式:终止+core;系统定义的硬件错误。通常,在遇到调试断点时,将控制权传递给debugger。

SIGTSTP     默认处理方式:停止进程;当输入挂起键(Control+Z)时,终端产生该(交互式停止)信号停止进程。该信号被发送给前台进程组。

SIGTTIN     默认处理方式:停止进程;当后台进程组中的进程要求从控制终端读取数据时,会产生该信号。有两个例外情况:1、要求读数据的后台进程忽略或阻塞了该信号,2、进程所属进程组是“孤儿”。在这两种情况下,不会产生该信号,否则,read会错误返回,并将errno设置为EIO。

SIGTTOU     默认处理方式:停止进程;当后台进程组中的进程要求写数据到控制终端时,会产生该信号。后台进程可以被允许写数据到控制终端。当不允许后台进程写数据到控制终端时,write会错误返回,并将errno设置为EIO。到有两个例外情况:1、要求写数据的后台进程忽略或阻塞了该信号,2、进程所属进程组是“孤儿”。在这两种情况下,不会产生该信号。

SIGURG     默认处理方式:忽略;当网络连接(Socket)接收到带外数据(out-of-band data)时,会产生该信号。

SIGUSR1     默认处理方式:终止;用户自定义的信号。

SIGUSR2     默认处理方式:终止;用户自定义的信号。

SIGVTALRM     默认处理方式:终止;由setitimer设置的虚拟定时器超时时,产生该信号。

SIGXCPU     默认处理方式:终止+core/忽略;进程超过了CPU的软限制时,产生该信号。

SIGXFSZ     默认处理方式:终止+core/忽略;进程超过了文件大小的软限制时,产生该信号。

原因,有人用ruby的telnet模块整了个windows端的自动测试,脚本没执行完就logout了导致有些程序
总莫名奇妙死掉; 可是并不是所有调用都出题,好像只有最后一个调用除了问题,而且telnet.cmd("script")
应该是阻塞型的啊,怎么脚本没执行完logout就执行了,太TMD奇怪了; 可能是脚本有问题吧,下周
检查一下脚本代码。
require 'net/telnet'

# 连接到远程主机 foobar
telnet = Net::Telnet.new("Host" => "foobar") {|c| print c} # 登陆
telnet.login("your name", "your password") {|c| print c}
# 登陆后等待提示 telnet.cmd("ls") {|c| print c}
# 执行命令后等待提示 # 稍复杂的例子
telnet.cmd("sleep 5 && echo foobar &") {|c| print c} STDOUT.flush # <- 若没有这句的话,是很难看出程序已经运行到这里的 # 等待前面命令的输出
telnet.waitfor(/foobar\Z/) {|c| print c} # 结束登陆会话
telnet.cmd("exit") {|c| print c}
telnet.close
 
 
 

linux 信号处理 二 (信号的默认处理)的更多相关文章

  1. linux 下信号处理命令trap && linux下各种信号的意义

    1.用途说明 trap是一个shell内建命令,它用来在脚本中指定信号如何处理.比如,按Ctrl+C会使脚本终止执行,实际上系统发送了SIGINT信号给脚本进程,SIGINT信号的默认处理方式就是退出 ...

  2. Linux环境进程间通信(二): 信号(上)

    linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...

  3. Linux环境进程间通信(二):信号(下)

    linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...

  4. 二十一、Linux 进程与信号---进程资源限制

    21.1 进程资源限制 在操作系统中,我们能够通过函数getrlimit().setrlimit()分别获得.设置每个进程能够创建的各种系统资源的限制使用量. 21.1.1 函数 #include & ...

  5. [转]Linux进程间通信——使用信号

    转载于:http://blog.csdn.net/ljianhui/article/details/10128731         经典!!! Linux进程间通信——使用信号 一.什么是信号 用过 ...

  6. Linux进程间通信——使用信号

    一.什么是信号 用过Windows的我们都知道,当我们无法正常结束一个程序时,可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?同样的功能在Linux上是通过生成信号和捕获信号来实现的,运行中 ...

  7. Linux系统的信号详解

    一.信号类型 1) SIGHUP       2) SIGINT       3) SIGQUIT     4) SIGILL        5) SIGTRAP 6) SIGABRT      7) ...

  8. linux 信号处理 六(全)

    一.信号及信号来源 信号本质 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的.信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实 ...

  9. linux 信号处理 五 (示例)

    [摘要]本文分析了Linux内核对于信号的实现机制和应用层的相关处理.首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理.接着分析了内核对于信号的处理流程包括信号的触发/注册/执 ...

随机推荐

  1. idea开发工具安装说明

    开发工具安装说明   安装JDK1.8 第一步,双击"jdk-8u45-windows-i586.exe"安装文件,进行安装,具体安装过程如下图所示: 第二步,右键我的电脑-属性- ...

  2. NRF51822+STM32bootload——typedef void (*Fun) (void) 理解

    1.typdef 用法如下所示 typedef unsigned char uint8_t; typedef unsigned short int uint16_t; typedef unsigned ...

  3. 北邮新生排位赛2解题报告d-e

    <> 427. 学姐逗学弟 时间限制 3000 ms 内存限制 131072 KB 题目描述 学弟们来了之后,学姐每天都非常高兴的和学弟一起玩耍.这一天,学姐想出了这样一个游戏,她画了一棵 ...

  4. cf935E

    题解: 树形dp 要记录一个最小的,一个最大的 然后转移 代码: #include<bits/stdc++.h> using namespace std; ; ][],f[N*][],T[ ...

  5. Java中的容器和注入分析

    为什么会出现容器的注入? 容器:顾名思义,装东西的器物. 至于spring中bean,aop,ioc等一些都只是实现的方式:具体容器哪些值得我们借鉴,我个人觉得是封装的思想.将你一个独立的系统功能放到 ...

  6. SQL语句执行过程详解

    一.SQL语句执行原理: 第一步:客户端把语句发给服务器端执行 当我们在客户端执行select语句时, 客户端会把这条SQL语句发送给服务器端,让服务器端的进程来处理这语句.也就是说,Oracle客户 ...

  7. Adaboost算法流程及示例

    1. Boosting提升方法(源自统计学习方法) 提升方法是一种常用的统计学习方法,应用十分广泛且有效.在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的 ...

  8. Java Junit 基础笔记

    Junit 1. 概念 JUnit是一个Java语言的单元测试框架. 单元测试:单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工 ...

  9. art.dialog 使用说明

    Js代码 2. 传入HTMLElement   备注:1.元素不是复制而是完整移动到对话框中,所以原有的事件与属性都将会保留 2.如果隐藏元素被传入到对话框,会设置display:block属性显示该 ...

  10. sparksql与hive整合

    参考文献: http://blog.csdn.net/stark_summer/article/details/48443147 hive配置 编辑 $HIVE_HOME/conf/Hive-site ...