Trap命令之信号处理

本文详细介绍了Shell脚本中的trap命令,用于处理接收到的信号。通过trap,可以执行指定的命令、恢复信号的默认操作或者忽视信号。文章列举了各种信号类型及其含义,并给出了设置陷阱来忽略某些信号,如HUP, INT, QUIT, TSTP,以及自定义信号处理程序的示例。" 121015080,11170803,内网渗透实践:突破安全策略上线CS,"['网络安全', '渗透测试', '计算机网络']
摘要由CSDN通过智能技术生成

一. trap捕捉到信号之后,可以有三种反应方式:
  (1)执行一段程序来处理这一信号
  (2)接受信号的默认操作
  (3)忽视这一信号

二. trap对上面三种方式提供了三种基本形式:   

 

      第一种形式的trap命令在shell接收到signal list清单中数值相同的信号时,将执行双引号中的命令串。   

  trap 'commands' signal-list   

  trap "commands" signal-list   

  

  为了恢复信号的默认操作,使用第二种形式的trap命令:   

  trap signal-list   或 trap : signal-list

 

  第三种形式的trap命令允许忽视信号   

  trap " " signal-list  



  注意:
  (1) 对信号11(段违例)不能捕捉,因为shell本身需要捕捉该信号去进行内存的转储
  (2) 在trap中可以定义对信号0的处理(实际上没有这个信号), shell程序在其终止(如执行exit语句)时发出该信号。
  (3) 在捕捉到signal-list中指定的信号并执行完相应的命令之后, 如果这些命令没有将shell程序终止的话,shell程序将继续执行收到信号时所执行的命令后面的命令,这样将很容易导致shell程序无法终止。

  另外,在trap语句中,单引号和双引号是不同的,当shell程序第一次碰到trap语句时,将把commands中的命令扫描一遍。此时若commands是用单引号括起来的话,那么shell不会对commands中的变量和命令进行替换, 否则commands中的变量和命令将用当时具体的值来替换。


      在有些情况下,我们不希望自己的shell脚本在运行时刻被中断,比如说我们写得shell脚本设为某一用户的默认shell,使这一用户进入系统后只能作某一项工作,如数据库备份, 我们可不希望用户使用ctrl+C之类便进入到shell状态,做我们不希望做的事情。这便用到了信号处理。

kill -l可以列出系统的信号名称,如下:

  1.  $ kill -l   
  2.  1) SIGHUP       
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值