精华内容
下载资源
问答
  • 2014-09-10 14:16:38

    开门见山,下面的脚本实现的功能是一直运行process进程,当该脚本接收到“1”信号时,执行clean函数杀死所有process命名的进程。

    #!/bin/sh
    clean()
    {
        killall process 2>/dev/null
    }
    
    trap clean 1
    #kill -1 $$
    
    RC=0
    while [ $RC -eq 0 ]
    do
        process
    RC=$?
    done
    该脚本首先执行trap clean 1命令,该命令使得该脚本接收到“1”信号后,执行clean函数,即重定向了“1”信号的处理;下面是一个while循环,拼命执行process进程,直到process被杀死返回错误码,退出循环。

    更多相关内容
  • shell 捕获信号

    2021-12-05 14:20:28
    shell 捕获信号

    也可以不忽略信号,在信号出现时捕获它们并执行其他命令。trap命令允许你来指定shell脚本要监看并从shell中拦截的Linux信号。如果脚本收到了trap命令中列出的信号,该信号不再由shell处理,而是交由本地处理。
    trap命令的格式是:

    trap commands signals 
    

    非常简单!在trap命令行上,你只要列出想要shell执行的命令,以及一组用空格分开的待捕获的信号。你可以用数值或Linux信号名来指定信号。
    这里有个简单例子,展示了如何使用trap命令来忽略SIGINT信号,并控制脚本的行为。

    $ cat test1.sh
    #!/bin/bash 
    # Testing signal trapping 
    # 
    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 "This is the end of the test script" 
    # 
    

    本例中用到的trap命令会在每次检测到SIGINT信号时显示一行简单的文本消息。捕获这些信号会阻止用户用bash shell组合键Ctrl+C来停止程序。

    $ ./test1.sh
    This is a test script 
    Loop #1 
    Loop #2 
    Loop #3 
    Loop #4 
    Loop #5 
    ^C Sorry! I have trapped Ctrl-C 
    Loop #6 
    Loop #7 
    Loop #8 
    ^C Sorry! I have trapped Ctrl-C 
    Loop #9 
    Loop #10 
    This is the end of the test script 
    $ 
    

    每次使用Ctrl+C组合键,脚本都会执行trap命令中指定的echo语句,而不是处理该信号并允许shell停止该脚本。

    展开全文
  • linux之shell-信号及trap信号捕捉

    千次阅读 2022-02-08 16:13:51
    trap命令 trap ‘commands’ signal-list:当脚本收到signal-list清单内列出的信号时,trap命令执行双引号中的命令 trap signal-list:trap...注意:trap 对同种signal只能相应一种设定,如果在一个shell里面设置多个tr

    trap命令

    trap ‘commands’ signal-list:当脚本收到signal-list清单内列出的信号时,trap命令执行双引号中的命令
    trap signal-list:trap不指定任何命令,接受信号的默认操作.默认操作是结束进程的运行
    trap - signal-list: 重置某个信号的处理为默认值,恢复信号
    trap ’ ’ signal-list:trap命令指定一个空命令串,允许忽视信号.

    注意:trap 对同种signal只能相应一种设定,如果在一个shell里面设置多个trap,如:
    trap ’ echo “aaaaaaaaaaa” ’ INT
    trap ’ echo “bbbbbbbbbbb” ’ INT

    那么它只会响应最后一个信号设定。

    实例1 捕捉到错误由命令中退出脚本

    err_handler() {
        ret=$?
        [ "$ret" -eq 0 ] && return
        echo "ERROR: Running ${FUNCNAME[1]} failed!"
        echo "ERROR: exit code $ret from line ${BASH_LINENO[0]}:"
        echo " $BASH_COMMAND"
    
        exit $ret #这里退出shell
    }
    
    trap 'err_handler' ERR
    
    set -eE #-E 设定之后 ERR 陷阱会被 shell 函数继承。
    

    实例2 ctrl+C无法退出脚本

    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 "This is the end of the test script"
    

    在这里插入图片描述

    signal信号

    signal 是要捕捉的信号。

    Linux 系统预定义的信号

    trap -l /kill -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
    16) SIGSTKFLT 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 30) SIGPWR
    31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
    38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
    43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
    48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
    53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
    58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
    63) SIGRTMAX-1 64) SIGRTMAX

    shell 内部自定义的信号(伪信号)

    EXIT 从一个函数中退出或整个脚本执行完毕

    ERR 当一条命令返回非零状态时(代表命令执行不成功)

    DEBUG 脚本中每一条命令执行之前

    Linux信号简介

    1. SIGHUP 本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联.

    2. SIGINT 程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出

    3. SIGQUIT 和SIGINT类似, 但由QUIT字符(通常是Ctrl-/)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号.

    4. SIGILL 执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行数据段. 堆栈溢出时也有可能产生这个信号.

    5. SIGTRAP 由断点指令或其它trap指令产生. 由debugger使用.

    6. SIGABRT 程序自己发现错误并调用abort时产生.

    7. SIGIOT 在PDP-11上由iot指令产生, 在其它机器上和SIGABRT一样.

    8. SIGBUS 非法地址, 包括内存地址对齐(alignment)出错. eg: 访问一个四个字长的整数, 但其地址不是4的倍数.

    9. SIGFPE 在发生致命的算术运算错误时发出.不仅包括浮点运算错误, 还包括溢出及除数为0等所有的算术的错误.

    10. SIGKILL 用来立即结束程序的运行. 本信号不能被阻塞, 处理和忽略.

    11. SIGUSR1 留给用户使用

    12. SIGSEGV 试图访问未分配给自己的内存, 或试图往没有写权限的内存地址写数据.

    13. SIGUSR2 留给用户使用

    14. SIGPIPE Broken pipe

    15. SIGALRM 时钟定时信号, 计算的是实际的时间或时钟时间. alarm函数使用该信号.

    16. SIGTERM 程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理. 通常用来要求程序自己正常退出. shell命令kill缺省产生这个信号.

    17. SIGCHLD 子进程结束时, 父进程会收到这个信号.

    18. SIGCONT 让一个停止(stopped)的进程继续执行. 本信号不能被阻塞. 可以用一个handler来让程序在由stopped状态变为继续执行时完成特定的工作. 例如, 重新显示提示符

    19. SIGSTOP 停止(stopped)进程的执行. 注意它和terminate以及interrupt的区别: 该进程还未结束, 只是暂停执行. 本信号不能被阻塞, 处理或忽略.

    20. SIGTSTP 停止进程的运行, 但该信号可以被处理和忽略. 用户键入SUSP字符时(通常是Ctrl-Z)发出这个信号

    21. SIGTTIN 当后台作业要从用户终端读数据时, 该作业中的所有进程会收到SIGTTIN信号. 缺省时这些进程会停止执行.

    22. SIGTTOU 类似于SIGTTIN, 但在写终端(或修改终端模式)时收到.

    23. SIGURG 有紧急数据或out-of-band数据到达socket时产生.

    24. SIGXCPU 超过CPU时间资源限制. 这个限制可以由getrlimit/setrlimit来读取/改变

    25. SIGXFSZ 超过文件大小资源限制.

    26. SIGVTALRM 虚拟时钟信号. 类似于SIGALRM, 但是计算的是该进程占用的CPU时间.

    27. SIGPROF 类似于SIGALRM/SIGVTALRM, 但包括该进程用的CPU时间以及系统调用的时间.

    28. SIGWINCH 窗口大小改变时发出.

    29. SIGIO 文件描述符准备就绪, 可以开始进行输入/输出操作.

    30. SIGPWR Power failure

    Bash Shell 环境变量

    变量 说明

    $* 含有所有命令行参数(以单个文本值的形式)

    $@ 含有所有命令行参数(以多个文本值的形式)

    $# 命令行参数数目

    $? 最近使用的前台进程的退出状态码

    $- 当前命令行选项标记

    $$ 当前shell的进程 ID (PID)

    $! 最近执行的后台进程的 PID

    $0 命令行中使用的命令名称

    $_ shell 的绝对路径名

    BASH 用来调用 shell 的完整文件名

    BASHOPTS 允许冒号分隔列表形式的 Shell 选项

    BASHPID 当前 bash shell 的进程 ID

    BASH_ALIASED 含有当前所用别名的数组

    BASH_ARGC 当前子函数中的参数数量

    BASH_ARGV 含有所有指定命令行参数的数组

    BASH_CMDS 含有命令的内部散列表的数组

    BASH_COMMAND 当前正在被执行的命令名

    BASH_ENV 如果设置了的话,每个 bash 脚本都会尝试在运行前执行由该变量定义的起始文件

    BASH_EXECUTION_STRING 在 -c 命令行选项中用到的命令

    BASH_LINENO 含有脚本中每个命令的行号的数组

    BASH_REMATCH 含有与指定的正则表达式匹配的文本元素的数组

    BASH_SOURCE 含有 shell 中已声明函数所在源文件名的数组

    BASH_SUBSHELL 当前 shell 生成的子 shell 数目

    BASH_VERS INFO 含有当前 bash shell 实例的主版本号和次版本号的数组

    BASH_VERS ION 当前 bash shell 实例的版本号

    BASH_XTRACEFD 当设置一个有效的文件描述符整数时,跟踪输出生成,并与诊断和错误信息分离开文件描述符必须设置 -x 启动

    COLUMNS 含有当前 bash shell 实例使用的终端的宽度

    COMP_CWORD 含有变量 COMP_WORDS 的索引直,COMP_WORDS 包含当前光标所在的位置

    COMP_KEY 调用补全功能的按键

    COMP_LINE 当前命令行

    COMP_POINT 当前光标位置相对干当前命令起始位置的索引

    COMP_TYPE 补全类型所对应的整数值

    COMP_WORDBREAKS 在进行单词补全时闬作单词分隔符的一组字符

    COMP_WORDS 含有当前命令行上所有单词的数组

    COMPREPLY 含有由 shell 函数生成的可能补全码的数组

    COPROC 含有若干匿名协程 I/O 的文件描述符的数组

    DIRSTACK 含有目录栈当前内容的数组

    EMACS 如果设置了该环境变量,则 shell 认为其使用的是 emacs shell 缓冲区,同时禁止行编辑功能

    ENV 当 shell 以 POSIX 模式调用时,每个 bash 脚本在运行之前都会执行由该环境变量所定义的起始文件

    EUID 当前用户的有效用户 ID(数字形式)

    FCEDIT fc 命令使用的默认编辑器

    FIGNORE 以冒号分隔的后缀名列表,在文件名补全时会被忽略

    FUNCNAME 当前执行的 shell 函数的名称

    FUNCNEST 嵌套函数的最髙层级

    GLOBIGNORE 以冒号分隔的模式列表,定义了文件名展开时要忽略的文件名集合

    GROUPS 含有当前用户属组的数组

    histchars 控制历史记录展开的字符(最多可有3个)

    HISTCMD 当前命令在历史记录中的编号

    HISTCONTROL 控制哪些命令留在历史记录列表中

    HISTFILE 保存 shell 历史记录列表的文件名(默认是 .bash_history)

    HISTFILESIZE 保存在历史文件中的最大行数

    HISTIGNORE 以冒号分隔的模式列表,用来决定哪些命令不存进历史文件

    HISTSIZE 最多在历史文件中保存多少条命令

    HISTIMEFORMAT 设置后,决定历史文件条目的时间戳的格式字符串

    HOSTFILE 含有 shell 在补全主机名时读取的文件的名称

    HOSTNAME 当前主机的名称

    HOSTTYPE 当前运行 bash shell 的机器

    IGNOREEOF shell 在退出前必须收到连续的 EOF 字符的数量。如果这个值不存在,默认是 1

    INPUTRC readline 初始化文件名(默认是 .inputrc)

    LANG shell 的语言环境分类

    LC_ALL 定义一个语言环境分类,它会覆盖 LANG 变量

    LC_COLLATE 设置对字符串值排序时用的对照表顺序

    LC_CTYPE 决定在进行文件名扩展和模式匹配时,如何解释其中的字符

    LC_MESSAGES 决定解释前置美元符($)的双引号字符串的语言环境设置

    LC_NUMERIC 决定格式化数字时的所使用的语言环境设置

    LINENO 脚本中当前执行代码的行号

    LINES 定义了终端上可见的行数

    MACHTYPE 用"cpu-公司-系统"格式定义的系统类型

    MAILCHECK Shell 多久查看一次新邮件(以秒为单位,默认值是 60)

    MAPFILE 含有 mapfile 命令所读入文本的数组,当没有给出变量名的时候,使用该环境变量

    OLDPWD shell 之前的工作目录

    OPTERR 设置为 1 时,bash shell 会显示 getopts 命令产生的错误

    OSTYPE 定义了 shell 运行的操作系统

    PIPESTATUS 含有前台进程退出状态码的数组

    POSIXLY_CORRECT 如果设置了该环境变量,bash 会以 POSIX 模式启动

    PPID bash shell 父进程的 PID

    PROMPT_COMMAND 如果设置该环境变量,在显示命令行主提示符之前会执行这条命令

    PS1 主命令行提示符字符串

    PS2 次命令行提示符字符串

    PS3 select 命令的提示符

    PS4 如果使用了 bash 的 -x 选项,在命令行显示之前显示的提示符

    PWD 当前工作目录

    RANDOM 返回一个 0~32 767 的随机数,对其赋值可作为随机数生成器的种子

    READLINE_LINE 保存了 readline 行缓冲区中的内容

    READLINE_POINT 当前 readline 行缓冲区的插入点位置

    REPLY read 命令的默认变量

    SECONDS 自 shell 启动到现在的秒数,对其赋值将会重置计时器

    SHELL shell 的全路径名

    SHELLOPTS 已启用 bash shell 选项列表,由冒号分隔

    SHLVL 表明 shell 层级,每次启动一个新的 bash shell 时计数加 1

    TIMEFORMAT 指定了 shell 显示的时间值的格式

    TMOUT select 和 read 命令在没输入的情况下等待多久(以秒为单位)。默认值为零,表示无限长

    TMPDIR 如果设置成目录名,shell 会将其作为临时文件目录

    UID 当前用户的真实用户 ID (数字形式)

    set命令

    set: set [–abefhkmnptuvxBCHP] [-o 选项名] [–] [参数 …]
    设定或取消设定 shell 选项和位置参数的值。
    改变 shell 选项和位置参数的值,或者显示 shell 变量的名称和值。
    set - 选项打开
    set + 选项关闭

    选项:
    -a 标记修改的或者创建的变量为导出。
    -b 立即通告任务终结。
    -e 如果一个命令以非零状态退出,则立即退出。
    -f 禁用文件名生成(模式匹配)。
    -h 当查询命令时记住它们的位置
    -k 所有的赋值参数被放在命令的环境中,而不仅仅是命令名称之前的参数。
    -m 启用任务控制。
    -n 读取命令但不执行

    -o 选项名
    设定与选项名对应的变量:
    allexport 与 -a 相同
    braceexpand 与 -B 相同
    emacs 使用 emacs 风格的行编辑界面
    errexit 与 -e 相同
    errtrace 与 -E 相同
    functrace 与 -T 相同
    hashall 与 -h 相同
    histexpand 与 -H 相同
    history 启用命令历史
    ignoreeof shell 读取文件结束符时不会退出
    interactive-comments允许在交互式命令中显示注释
    keyword 与 -k 相同
    monitor 与 -m 相同
    noclobber 与 -C 相同
    noexec 与 -n 相同
    noglob 与 -f 相同
    nolog 目前可接受但是被忽略
    notify 与 -b 相同
    nounset 与 -u 相同
    onecmd 与 -t 相同
    physical 与 -P 相同
    pipefail 管道的返回值是最后一个非零返回值的命令的返回结果,或者当所有命令都返回零是也为零。
    posix 改变默认时和 Posix 标准不同的 bash 行为以匹配标准
    privileged 与 -p 相同
    verbose 与 -v 相同
    vi 使用 vi 风格的行编辑界面
    xtrace 与 -x 相同

    -p 无论何时当真实的有效的用户身份不匹配时打开。禁用对 $ENV 文件的处理以及导入 shell 函数。关闭此选项会导致有效的用户编号和组编号设定为真实的用户编号和组编号

    -t 读取并执行一个命令之后退出。

    -u 替换时将为设定的变量当作错误对待。

    -v 读取 shell 输入行时将它们打印。

    -x 执行命令时打印它们以及参数。

    -B shell 将执行花括号扩展。

    -C 设定之后禁止以重定向输出的方式覆盖常规文件。

    -E 设定之后 ERR 陷阱会被 shell 函数继承。

    -H 启用 ! 风格的历史替换。当 shell 是交互式的时候这个标识位默认打开。

    -P 设定之后类似 cd 的会改变当前目录的命令不追踪符号链接。

    -T 设定之后 DEBUG 陷阱会被 shell 函数继承。

    – 任何剩余的参数会被赋值给位置参数。如果没有剩余的参数,位置参数不会被设置。

    - 任何剩余的参数会被赋值给位置参数。

    -x 和 -v 选项已关闭。

    使用 + 而不是 - 会使标志位被关闭。标志位也可以在shell 被启动时使用。当前的标志位设定可以在 $- 变量中找到。剩余的 ARG 参数是位置参数并且是按照$1, $2, … $n 的顺序被赋值的。如果没有给定 ARG参数,则打印所有的 shell 变量。

    展开全文
  • 目录 trap的基础概念 定义一个trap 忽略信号 重置信号 trap的实例 ...快捷键:CTRL+(C、Z、\):对于脱离了终端的后台进程无效 ...接收到信号后,会等待正在执行的前台...交互式shell默认会自动忽略TERM信号。在任何...

     

    目录

    trap的基础概念 

    定义一个trap 

     忽略信号 

     重置信号

     trap的实例

    清理临时文件

    清理脚本中的后台进程

    采坑点

    快捷键:CTRL+(C、Z、\):对于脱离了终端的后台进程无效

    接收到信号后,会等待正在执行的前台任务完成后去触发信号处理程序。原因是:shell认为前台进程都是重要任务

     信号守护的范围

    CTRL+C和SIGINT不等价:前者发INT给shell及其内所有子进程,后者只发送给shell

    交互式shell默认会自动忽略TERM信号。在任何情况下,都会忽略QUIT信号


    trap的基础概念 

    定义一个trap 

    [root@15:14:15 /opt/shellTest]#trap -p
    [root@15:14:17 /opt/shellTest]#
    [root@15:14:18 /opt/shellTest]#
    [root@15:14:18 /opt/shellTest]#trap 'echo traped' INT
    [root@15:18:06 /opt/shellTest]#
    [root@15:18:07 /opt/shellTest]#
    [root@15:18:07 /opt/shellTest]#trap -p
    trap -- 'echo traped' SIGINT
    

    这个意思就是说当按下Ctrl +c 时输出 traped 

    可以以列表的形式去定义

     忽略信号 

    忽略TERM信号

     忽略INT信号

     重置信号

     trap的实例

    清理临时文件

    经常在脚本中会创建文件然后执行结束之后删除,但是当脚本在删除前发生异常,则就会有临时文件产生。如何解决这个问题呢?

    捕获异常并触发删除脚本达到此目的。

    #!/bin/bash
    trap 'echo traped;rm -rf $tmp_dir;exit 1' INT HUP QUIT TERM
    
    tmp_dir=/tmp/$BASHPID
    mkdir -p $tmp_dir
    touch $tmp_dir/{a..d}.log
    echo "$tmp_dir"
    ls -l $tmp_dir
    sleep 5s
    
    
    rm -rf $tmp_dir
    
    echo "over"
    

    注意可以使用trap 'echo traped;rm -rf $tmp_dir;exit 1' EXIT

    但是不推荐,因为需要程序员去考虑EXIT是哪种退出,而INT HUP QUIT TERM是明确的退出信号。

    一般trap的action中要exit 1. 这个是退出状态码,可以自己定义并作出相应的动作,例如报警...

    清理脚本中的后台进程

    当脚本脱离终端运行后,即使你发送INT信号,还是会一直输出。

    看一个小例子

    #!/bin/bash
    
    while true;do
    sleep 1s
    echo hhahha
    done & 
    sleep 3

     主进程等待3s之后,将while true进行后台运行。即使发送INT信号也没有用。使用killall bash才可以停下。

    此处需要注意一定要取消刚才定义的trap TERM才能生效。

     

    #!/bin/bash
      
    function signal_hangdle {
            echo trapped
            kill $pid
            exit 1
    }
    
    #trap  'signal_handle' EXIT
    
    sleep 10s &
    pid=$!
    
    sleep 20s &
    pid="$! $pid"
    
    
    sleep 5s
    ~                                                                               
    ~               

    结果: 

     使用trap INT的结果:

     trap EXIT:

    问题点: 脚本中需要不断收集进程id,如果有10个sleep那就需要收集后台进程ID。

    man一下kill 的用法 0 代表进程组,那直接kill 0就可以免去收集后台进程ID

     

    结果:

     

    采坑点

    快捷键:CTRL+(C、Z、\):对于脱离了终端的后台进程无效

    接收到信号后,会等待正在执行的前台任务完成后去触发信号处理程序。原因是:shell认为前台进程都是重要任务

     信号守护的范围

    CTRL+C和SIGINT不等价:前者发INT给shell及其内所有子进程,后者只发送给shell

     

    交互式shell默认会自动忽略TERM信号。在任何情况下,都会忽略QUIT信号

    killall bash也是基于此才不会关闭当前终端这个shell

     

    展开全文
  • shell脚本之信号捕捉

    千次阅读 2018-08-14 13:13:55
    shell——trap捕捉信号(附信号表) trap捕捉信号有三种形式 第一种:trap "commands" signal-list当脚本收到signal-list清单内列出的信号时,trap命令执行双引号中的命令. 例1 #!/bin/bash trap &...
  • shell : trap 捕捉信号

    2020-05-14 10:56:56
    linux shell脚本中处理信号的方法 trap是一个shell内建命令,它用来在脚本中指定信号如何处理。 常用参数 trap [-lp] [[arg] sigspec …] 格式:trap “commands” signals 当shell接收到signals指定的信号时,...
  • (1)捕捉信号:trap命令 常用信号 ctrl+c(终止进程) ctrl+z(暂停进程,打入后台) [root@server ~]# trap "echo westos" 2 [root@server ~]# ^Cwestos (2)列出中断信号与...
  • Shell 信号发送与捕捉

    2021-05-12 17:04:43
    防伪码:李白乘舟将欲行,忽闻岸上踏歌声。9.1 Linux 信号类型信号(Signal):信号是在软件层次上对中断机制的一种模拟,通过给一...2)捕捉信号。3)执行缺省操作,Linux 对每种信号都规定了默认操作。Linux 究竟采用...
  • 原标题:Shell 信号发送与捕捉作者:李振良OK1、Linux信号类型信号(Signal):信号是在软件层次上对中断机制的一种模拟,通过...2)捕捉信号。3)执行缺省操作,Linux对每种信号都规定了默认操作。Linux究竟采用上述三...
  • shell脚本之信号的捕捉​trap,翻译过来就是陷阱的意思,shell脚本中的陷阱是专门用来捕捉信号的。啥信号呢?比如经常使用的kill -9,kill -15,CTRL+C等都属于信号1、查看所有可用的信号trap -l或kill -l即可[root@...
  • trap捕捉信号之后,可以有三种反应方式:(1)执行一段程序来处理这一信号(2)接受信号的默认操作(3)忽视这一信号二. trap对上面三种方式提供了三种基本形式:第一种形式的trap命令在shell接收到signal list清单中...
  • 本文目录:1.1 信号说明1.2 trap布置陷阱1.3 布置完美陷阱必备知识家里有老鼠,快消灭它!哎,又给跑了。老鼠这小东西跑那么快,想直接直接消灭它还真不那么容易。于是,老鼠药、老鼠夹子或老鼠笼就派上用场了,它们...
  • shell编程 信号处理

    2021-06-22 19:35:17
    信号控制 信号说明 查看信号的命令kill -l [root@m01 ftp]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) ...
  • Shell信号发送与捕捉

    千次阅读 2019-01-09 17:31:17
    信号(Signal):信号是在软件层次上对中断机制的一种模拟,通过给一个进程发送信号,执行相应的处理函数。 linux通过信号来在运行在系统上的进程之间通信...2)捕捉信号。 3)执行缺省操作,Linux对每种信号都规...
  • trap捕捉信号有三种形式 第一种: trap "commands" signal-list 当脚本收到signal-list清单内列出的信号时,trap命令执行双引号中的命令. 例1 #!/bin/bash trap "echo 123" 15 while true do echo abc sleep 5 ...
  • shell脚本之信号的捕捉​ trap,翻译过来就是陷阱的意思,shell脚本中的陷阱是专门用来捕捉信号的。啥信号呢?比如经常使用的kill -9,kill -15,CTRL+C等都属于信号1、查看所有可用的信号trap -l或kill -l即可[root...
  • Shell使用Linux信号

    2021-07-06 15:56:32
    一、信号简介 有时候,你在Linux运行一个脚本,它陷入了出乎意料的循环,这时,...默认情况下,shell会将这些传给shell脚本程序来处理,而shell脚本默认的行为是忽略这些信号,有时候不太利于脚本的运行,为了避免这种
  • shell信号捕捉trap

    2019-01-10 21:16:35
    2.捕捉信号 [root@localhost mnt]# trap "echo hello" 2 编辑按Ctrl+C时输出hello [root@localhost mnt]# ^Chello 3.屏蔽信号 [root@localhost mnt]# trap "" 2 [root@localhost mnt]# trap : 2 [root@...
  • Shell信号捕获

    2021-05-17 12:27:55
    一般的shell脚本都是自上而下,从左之后运行,碰到异常信号就会出错,从而终止脚本的运行,这个时候脚本可能运行到某一处数据写入操作的时候,强迫停止,从而造成重大失误,trap可能帮助我们尽量减少这个问题,记住...
  • 一、Linux信号 Linux系统和应用程序可以生成超过30个信号。下面列出了在Linux编程时会遇到的最常见 的Linux系统信号信号 值 描述 1 SIGHUP 挂起进程 2 SIGINT 终止进程(ctrl+c) 3 SIGQUIT 停止进程 9 ...
  • shell编程-信号处理

    2021-05-28 00:08:24
    信号控制 一 信号说明 在脚本执行过程中, 可能会被一些键盘操作快捷方式所打断, 影响脚本运行 # HUP(1): 1、挂起信号 2、往往可以让进程重新加载配置 本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的...
  • linux shell中捕获信号

    2021-05-17 17:19:41
    Bash脚本可以通过在脚本中添加trap命令来捕获执行中收到的信号,并且trap后面可以指定收到信号后的操作:trap commonds signals注:感觉类似一个钩子,捕获信号然后按照既定的操作执行。示例:1、捕获Ctrl+C命令,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,188
精华内容 4,075
关键字:

shell捕捉信号