精华内容
下载资源
问答
  • Linux下trap信号的捕获

    2020-07-26 12:40:10
    trap是一个shell内建命令,它用来在脚本中指定信号如何处理。信号处理在shell编程中非常重要,一般我们会使用信号进行进程间的通信工作。 我们可以使用kill命令发送信号,然后使用trap命令捕获并处理信号。kill命令...

    trap是一个shell内建命令,它用来在脚本中指定信号如何处理。信号处理在shell编程中非常重要,一般我们会使用信号进行进程间的通信工作。

    我们可以使用kill命令发送信号,然后使用trap命令捕获并处理信号。kill命令很多人理解就是杀死进程,殊不知kill除了可以杀死进程还可以做别的。

    kill命令本质

    kill本质上是在给进程发送特定信号,这个信号可以是告诉进程终止运行、继续运行、暂停运行等等。而进程在收不到这些信号就会执行具体的动作。

    在这里插入图片描述
    说明:

    只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。 下面是常用的信号:

    HUP 1 终端断线
    INT 2 中断(同 Ctrl + C)
    QUIT 3 退出(同 Ctrl + \)
    TERM 15 终止
    KILL 9 强制终止
    CONT 18 继续(与STOP相反, fg/bg命令)
    STOP 19 暂停(同 Ctrl + Z)

    上面的信息输入kill -l就显示所有信号的列表。这些信号可以使用数字、英文全称、或者简称表示。但是不同的系统环境对这些表示方式的支持是不一样的,这个具体使用时需要提前测试。推荐使用英文名称,这样兼容性会更好一些。

    信号

    信号是一种进程间通信机制,它给应用程序提供一种异步的软件中断,使应用程序有机会接受其他程序活终端发送的命令(即信号)。

    使用kill命令不指定信号时,默认信号为SIGTERM,该信号默认会终止进程。SIGINT信号等同于使用Ctrl +C组合键,默认会中断进程。

    trap.sh

    #!/bin/bash
    
    trap "echo 'sorry! I have trapped Ctrl +C'" SIGINT
    
    count=1
    while [ $count -le 5 ]
    do
    	echo "Loop $count"
    	sleep 1
    	count=$[ $count + 1 ]
    done
    trap "echo 'Sorry! The trap has been modified.'" SIGINT
    
    count=1
    while [ $count -le 5 ]
    do
    	echo "Loop $count"
    	sleep 1
    	count=$[ $count + 1 ]
    done
    
    echo The end
    
    

    在这里插入图片描述

    而SIGSTOP信号可以暂停一个进程,SIGCONT信号可以恢复暂停的进程继续运行。发送SIGTSTP信号等同于使用Ctrl + Z组合键,也可以通过CONT信号唤醒恢复进程。SIGKILL信号会强制杀死进程。

    下面我们通过编写一个死循环来验证这些信号。

    #!/bin/bash
    
    while :
    do
    	echo "signal"
    	sleep 1
    done
    
    echo "demo"
    
    
    

    编译运行:
    在这里插入图片描述

    因为前面的循环的永远是无限循环,当前命令终端暂时无法使用,我们需要重新开启一个新的命令终端。

    查看进程
    在这里插入图片描述
    这个时候使用命令kill -19 7942,传递暂停信号。

    在这里插入图片描述
    回到第一个命令终端会发现死循环脚本会被暂停了。

    在这里插入图片描述
    回到第二个命令终端继续发送恢复信号让继续循环脚本。

    在这里插入图片描述
    回到第一个终端会发现,脚本继续执行。
    在这里插入图片描述

    在shell脚本中我们可以通过trap来捕获信号,并捕获信号,并可以自定义需要执行的相应命令,其语法入如下:

    在这里插入图片描述

    trap命令是专用于捕捉信号的。比如像ctrl+c发送给终端的中断信号等等。在捕捉到信号之后,可以进行一系列的操作。

    用法:trap ‘COMMAND’ INT

    下面我们接着上面的脚本进行修改,添加trap代码实现捕获信号。

    #!/bin/bash
    
    trap 'echo "涓嶄腑鏂瓅鐫$湢.";sleep 3' INT TSTP
    trap 'echo 娴嬭瘯;sleep 3' HUP
    
    while :
    do
    	echo "signal"
    	sleep 1
    done
    
    echo "demo"
    

    执行脚本后,使用组合键Ctrl +C和Ctrl +Z都不会导致脚本中断和睡眠,反而是在屏幕上显示一条消息后睡眠3秒继续。我们还可以在启动一个命令中断执行 kill -HUP <进程号>

    因为无法使用Ctrl+C组合键进行中断操作,所以我们需要查询进程ID后通过TERM信号杀死进程。

    在这里插入图片描述

    总结

    要捕捉发送到您的进程的信号,请使用内置的 trap 命令。在捕捉到信号后,正在执行的当前命令会尝试在 trap 接管之前结束执行。如果该命令为 SIGKILL,那么终止将立即执行。如果忽略某些信号,将执行默认操作。

    最后需要说明的是,在Shell脚本中不能捕获所有信号,像TERM、KILL之类的信号是无法被捕获的。

    在这里插入图片描述

    欢迎关注微信公众号【程序猿编码】,添加本人微信号(17865354792),回复:领取学习资料。或者回复:进入技术交流群。网盘资料有如下:

    在这里插入图片描述

    展开全文
  • trap命令用于指定在接收到信号后将要采取的动作。常见的用途是在脚本程序被中断时完成清理工作。我在写自动升级脚本的时候,为防止脚本运行期间是不能允许其使用Ctrl+C等中断退出的,故使用了trap命令。 一、关于...

    trap命令用于指定在接收到信号后将要采取的动作。常见的用途是在脚本程序被中断时完成清理工作。我在写自动升级脚本的时候,为防止脚本运行期间是不能允许其使用Ctrl+C等中断退出的,故使用了trap命令。
    一、关于信号
      历史上,shell总是用数字来代表信号,而新de脚本程序应该使用信号de名字,它们保存在用#include命令包含进来designal.h头文件中,在使用信号名时需要省略SIG前缀。
      kill和trap等都可以看到信号编号及其关联de名称。“信号”是指那些被异步发送到一个程序de事件。默认情况下,它们通常会终止一个程序de运行。
    引用
      # trap -l
      1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
      5) SIGTRAP 6) SIGABRT 7)SIGBUS 8) SIGFPE
      9) SIGKILL 10) SIGUSR1 11)SIGSEGV 12) SIGUSR2
      13) SIGPIPE 14) SIGALRM 15)SIGTERM 17) SIGCHLD
      18) SIGCONT 19) SIGSTOP 20)SIGTSTP 21) SIGTTIN
      22) SIGTTOU 23) SIGURG 24)SIGXCPU 25) SIGXFSZ
      26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29)SIGIO
      
    例如:# trap “echo ‘Hello World’” HUP INT QUIT TSTP
      这样,当您运行Ctrl+C 等中断时,会自动运行echo命令,结果就是显示“HelloWorld”字符串。

    展开全文
  • Linuxtrap命令

    2016-12-14 22:49:08
    Linuxtrap命令

    文章作者:Tyan
    博客:noahsnail.com  |  CSDN  |  简书

    1. Linux信号

    Linux系统利用信号与系统中的进程进行通信。Linux的常见信号有:

    信号描述
    1SIGHP挂起进程
    2SIGINT终止进程
    3SIGQUIT停止进程
    9SIGKILL无条件终止进程
    15SIGTERM尽可能终止进程
    17SIGSTOP无条件停止进程,但不是终止进程
    18SIGTSTP停止或暂停进程,但不终止进程
    19SIGCONT继续运行停止的进程

    2. 信号组合键

    Ctrl+C组合键会产生SIGINT信号,Ctrl+Z会产生SIGTSTP信号。

    3. trap命令

    trap命令允许你来指定shell脚本要监视并拦截的Linux信号。trap命令的格式为:trap commands signals

    demo1

    shell脚本:

    #!/bin/bash
    # test trap command
    trap "echo 'Sorry! I have trapped Ctrl-C'" SIGINT
    
    echo This is a test script
    
    count=1
    while [ $count -le 10 ]
    do
      echo "Loop $count"
      sleep 1
      count=$[ $count + 1 ]
    done
    
    echo The end.

    运行结果:

    This is a test script
    Loop 1
    Loop 2
    ^CSorry! I have trapped Ctrl-C
    Loop 3
    Loop 4
    ^CSorry! I have trapped Ctrl-C
    Loop 5
    Loop 6
    Loop 7
    Loop 8
    ^CSorry! I have trapped Ctrl-C
    Loop 9
    Loop 10
    The end.

    demo2

    除了在shell脚本中捕获信号外,也可以在shell退出时捕获,在trap命令后加上EXIT信号就行。

    shell脚本:

    #!/bin/bash
    # test trap command
    trap "echo Goodbye." EXIT
    
    echo This is a test script
    
    count=1
    while [ $count -le 10 ]
    do
      echo "Loop $count"
      sleep 1
      count=$[ $count + 1 ]
    done
    
    echo The end.

    运行结果:

    This is a test script
    Loop 1
    Loop 2
    Loop 3
    Loop 4
    Loop 5
    Loop 6
    Loop 7
    Loop 8
    Loop 9
    Loop 10
    The end.
    Goodbye.

    demo3——修改trap操作

    #!/bin/bash
    # test trap command
    
    trap "echo 'Sorry! I have trapped Ctrl-C'" SIGINT
    
    count=1
    while [ $count -le 5 ]
    do
      echo "Loop $count"
      sleep 1
      count=$[ $count + 1 ]
    done
    
    
    trap "echo 'Sorry! The trap has been modified.'" SIGINT
    
    count=1
    while [ $count -le 5 ]
    do
      echo "Loop $count"
      sleep 1
      count=$[ $count + 1 ]
    done
    
    echo The end.

    运行结果:

    Loop 1
    Loop 2
    Loop 3
    ^CSorry! I have trapped Ctrl-C
    Loop 4
    Loop 5
    Loop 1
    Loop 2
    Loop 3
    ^CSorry! The trap has been modified.
    Loop 4
    Loop 5
    The end.

    demo4

    删除捕获,命令形式为:trap -- ***,例如trap -- SIGINT

    参考资料

    1. Linux命令行与shell脚本大全
    展开全文
  • Linux命令trap

    2019-05-20 15:15:02
    trap的运用 1、trap的语法1: trap “触发指令” 信号串行 只要系统产生特定信号,trap就会触发指令。 trap 'echo 123' ABRT ; kill -ABRT $$ 屏幕会出现123 $$代表当前shell进程编号 。 2、trap的语法2: trap - 信号...

    trap的运用

    1、trap的语法1: trap “触发指令” 信号串行
    只要系统产生特定信号,trap就会触发指令。
    trap 'echo 123' ABRT ; kill -ABRT $$ 屏幕会出现123 $$代表当前shell进程编号 。

    2、trap的语法2: trap - 信号串行
    如果trap语法中没有触发指令,而是-或空白,则可恢复信号串行的原本的作用。
    trap '-' ABRT 恢复ABRT原本的作用。

    3、trap的语法3: trap ‘’ 信号串行
    忽略系统发出的信号串行 trap '' INT Ctrl-C 讲失效,无法终止进程。

    4、trap的语法4: trap -p
    列出目前trap向shell注册的信号列表。

    展开全文
  • linux shell trap

    2013-09-16 21:20:28
    信号处理(Signal Handling)在 Linux 编程中一直扮演者重要的角色,几乎每个系统工具都要用到它,最常见的功能莫过于用信号进行进程间通信(尤其是父子进程)以及捕捉SIGINT、SIGTERM之类的退出信号以做一些善后...
  • Linux -trap

    2016-07-25 16:32:03
    trap 命令,用来相应信号。其命令格式如下: trap "command or commands" signal-numbers(or names) note:命令或者命令组应该放在双引号内,多个命令用分号隔开,多个信号之间用空格分开 trap的三种形式 (1) 如果...
  • Linux系统下trap命令在Shell编程中的应用.pdf
  • linux shell编程 trap命令trap命令用于指定在接收到信号后将要采取 的行 动,我们将在本书后面的内容中详细介绍信号。trap命令的一种常见用途是在脚本程序被中断时完成清理工作。历史上,shell总是用数字来代表信号...
  • linuxtrap命令

    2019-08-25 16:30:37
    trap捕捉到信号之后,可以有三种反应方式:  (1)执行一段程序来处理这一信号  (2)接受信号的默认操作  (3)忽视这一信号 二. trap对上面三种方式提供了三种基本形式: 第一种形式的trap命令在shell接收到signal...
  • 00. 目录 文章目录00. 目录01. 命令概述02. 命令格式03. 常用选项04. 其它说明05. 参考示例06....01. 命令概述 trap命令用于指定在接收到信号后将要采取的动作,常见的用途是在...用法:trap [-lp] [[参数] 信号声明 .....
  • Linux 配置TRAP 的问题

    2015-04-24 02:44:21
    java 代码 监控Linux主机 ,让Linux主机自动发送Trap的实现步骤 我刚接触不是很了解,求高人指点,以前不怎么使用这个 已在Linux 上 安装了 net-snmp 困惑: 我的java 程序跑在Windows上,我需要监控 Linux 主机,让...
  • linux trap

    2015-11-20 17:17:00
    linux trap posted on 2015-11-20 17:17 秦瑞It行程实录 阅读(...) 评论(...) 编辑 收藏 var allowComments=true,cb_blogId=156984,cb_entryId=4981473,....
  • Linux - trap 命令

    2018-04-02 19:06:00
    trap 命令用于指定在接收到信号后将要采取的动作,常见的用途是在脚本程序被中断时完成清理工作。当shell接收到sigspec指定的信号时,arg参数(命令)将会被...INT(2) # 中断,通常因按Ctrl+C组合键而引发 QUIT(3...
  • linux shell trap功能介绍

    2014-12-12 16:51:47
     trap 'commands' signal-list 当脚本收到signal-list清单内列出的信号时,trap命令执行双引号中的命令. 第二种:  trap signal-list  trap不指定任何命令,接受信号的默认操作.默认操作是结束进程的运行. ...
  • Linuxtrap命令

    2016-04-23 23:47:58
    二 使用trap命令 trap命令:用于捕获指定的信号并执行预定义的命令。 其基本的语法是: trap 'command' signal 其中signal是要捕获的信号,command是捕获到指定的信号之后,所要执行的命令。可以用kill –l...
  • linux shell trap的使用

    2013-09-14 22:57:30
    trap捕捉到信号之后,可以有三种反应方式:  (1)执行一段程序来处理这一信号  (2)接受信号的默认操作  (3)忽视这一信号  二. trap对上面三种方式提供了三种基本形式:  第一种形式的trap命令在shell接收...
  • linux下trap命令

    2013-08-08 14:14:02
    trap命令用于指定在接收到信号后将要采取的动作。常见的用途是在脚本程序被中断时完成清理工作。不过,这次我遇到它,是因为客户有个需求:从终端访问服务器的用户,其登陆服务器后会自动运行某个命令,例如打开应用...
  • linux trap命令

    2010-10-24 20:05:00
    linux trap命令
  • Linux trap 命令

    2018-09-26 18:37:56
    用途说明 trap是一个shell内建命令,它用来指定信号的处理方式,例如: 使用Ctrl +c会是一个非守护进程中之执行,实际上是给进程发送...trap命令不仅可以处理Linux信号,还可以对脚本的退出(EXIT)、调试(DEBUG)、错...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,669
精华内容 9,067
关键字:

linux下trap

linux 订阅