linux信号解释(5)--bash下的理解

上一节中用了C语言来理解信号的处理,那么在bash中是如何理解的呢?

首先我们来认识一下trap命令#type trap

o_o原来是一个shell的内建命令,大家能想想为何是内建命令吗?
sh是人机对话的接口,我们发起的命令都会通过sh与内核进行打交道,那么在当前sh进程内就能及时完成信号的捕捉和处理。

好了我们回到bash中如何理解呢?我们还是用回上一节的实例来做,创建一个signalshell.sh文件,文件内容如下:

#!/bin/bash
#
echo "Process ID is $$" #$$获取当前进程的ID,可看到笔者的《sh变量特性(3)默认特性》
#trap的使用格式 trap ‘command;command‘ signal
trap ‘echo "Get a singal -- SIGHUP"‘ SIGHUP
trap ‘echo "Get a singal -- SIGINT"‘ SIGINT
trap ‘echo "Get a singal -- SIGQUIT"‘ SIGQUIT
#写个死循环来让进程一直运行,以便捕捉信号
while true
do
        sleep 1
done

保存文档,并添加可执行权限#chmod u+x signalshell.sh
执行一下#./signalshell.sh

同样想要杀死进程,按ctrl+c已经是不行了,只能发送第9信号,上去就一刀把进程杀死,不给喘气的机会^_^

题外扩展一下:如果写个循环脚本来ping某个网段,当按下ctrl+c的时候,并不会退出当前进程,而是退出了当前ping,还会循环继续ping下一个ip。那么写脚本可以让用户按下ctrl+c的时候就可以退出脚本,而不继续ping呢?

原文地址:http://blog.51cto.com/lythjq/2083304

时间: 2024-07-29 06:27:02

linux信号解释(5)--bash下的理解的相关文章

linux信号解释(4)--C语言下的理解

上一节中中简单介绍了信号的处理机制,就是调用函数库来实现信号的处理,因此,在这节中,介绍在C语言下如何理解信号的处理机制. 创建一个文件signal.c,文件内容如下:(对于学过一下C语言的童鞋来说是不是很熟悉呢) #include<signal.h> //信号函数库 #include<unistd.h> //C和C++语言提供对POSIX #include<stdio.h> //标准的输入输出库 void signalout(int signo) //自定义signa

linux信号解释(2)

笔者学识不深,以下内容是网上摘取,以便日后使用. 信号 信号详细描述 简明描述 处理方式 1) SIGHUP 本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联. 连接挂断 终止(默认处理) 2) SIGINT 程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程. 终端中断,Ctrl+c产生该信号 终止(terminate) 3) SI

linux信号解释(3)--信号处理机制

如果需要进程捕获某个信号,并作出相应的处理,就需要注册信号处理函数(其实就是内核里需要识别信号函数,类似C语言里的include某函数库). 处理信号就类似软中断,内核为每个进程准备了一段信号向量表,记录信号的处理机制.当某个信号发生后,内核就会调用注册的函数去处理. 信号何时来,是未知的,因此进程不可能一直等待信号来.信号的接收不是有用户进程来完成,需要内核来代理.当用户进程P2向另一个进程P1发送信号后,内核接收到信号,将信号放置P1进程的信号队里中.当P1进程进入内核态时,会检查信号队列,

Linux 信号理解(二)

linux下信号基本概念见:Linux 信号理解(一) 接下来讲重点讲述信号捕捉设定 #include<stdio.h> #include<signal.h> #include<errno.h> void capture_sig(int num) { int n=4; printf("capture_sig is called \n"); while(n--) { sleep(1); printf(" num:%d \n",num

linux bash下免密碼登陸ROS

linux命令 1.生成key文件 ssh-keygen -t dsa 2.copy到ROS文件目錄裏面 scp .ssh/id_dsa username@XX.XX.XX.XX: 3.登陸ROS,並在ROS上面導入key user ssh-keys import public-key-file=id_dsa.pub user=username linux bash下免密碼登陸ROS,布布扣,bubuko.com

bash下. : () {} [] [[]] (())的解释

一. bash下. : () {} [] [[]] (())的解释 : 1).(点)与source命令一样,从文件中读取并执行命令,无论该文件是否都有可执行权限都能够正确的执行.且是在当前shell下执行,而不是产生一个子shell来执行(我们通常使用"./filename.sh"去执行一个文件是在当前shell下产生一个子shell去执行的) 2): 该命令什么都不做,但执行后会返回一个正确的退出代码,即exit 0,类似于pass 3)() 将多个命令组合在一起执行,相当于一个命令

linux信号基本概念及如何产生信号

linux信号基本概念及如何产生信号 摘自:https://blog.csdn.net/summy_j/article/details/73199069 2017年06月14日 09:34:21 阅读数:4131 标签: linux信号 更多 个人分类: Linux 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/summy_J/article/details/73199069 阅前须知 本文的主要内容有: 1.信号的基本概念(包括进程对信号的3

Linux信号、信号处理和信号处理函数

信号(signal)是一种软件中断,它提供了一种处理异步事件的方法,也是进程间惟一的异步通信方式.在Linux系统中,根据POSIX标准扩展以后的信号机制,不仅可以用来通知某种程序发生了什么事件,还可以给进程传递数据. 一.信号的来源 信号的来源可以有很多种试,按照产生条件的不同可以分为硬件和软件两种. 1.  硬件方式 当用户在终端上按下某键时,将产生信号.如按下组合键后将产生一个SIGINT信号. 硬件异常产生信号:除数据.无效的存储访问等.这些事件通常由硬件(如:CPU)检测到,并将其通知

Linux 信号signal处理机制(ZZ)

http://www.cnblogs.com/taobataoma/archive/2007/08/30/875743.html 信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念.Linux对信号机制的大致实现方法.如何使用信号,以及有关信号的几个系统调用. 信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断.从它的命名可以看出,它的实质和使用很象中断.所以,信号可以说是进程控制的一部分. 一.信号的基本概念 本节先介绍信号的一些基本概念,然后