-
2014-09-10 14:16:38
开门见山,下面的脚本实现的功能是一直运行process进程,当该脚本接收到“1”信号时,执行clean函数杀死所有process命名的进程。
该脚本首先执行trap clean 1命令,该命令使得该脚本接收到“1”信号后,执行clean函数,即重定向了“1”信号的处理;下面是一个while循环,拼命执行process进程,直到process被杀死返回错误码,退出循环。#!/bin/sh clean() { killall process 2>/dev/null } trap clean 1 #kill -1 $$ RC=0 while [ $RC -eq 0 ] do process RC=$? done
更多相关内容 -
shell 捕获信号
2021-12-05 14:20:28shell 捕获信号也可以不忽略信号,在信号出现时捕获它们并执行其他命令。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:51trap命令 trap ‘commands’ signal-list:当脚本收到signal-list清单内列出的信号时,trap命令执行双引号中的命令 trap signal-list:trap...注意:trap 对同种signal只能相应一种设定,如果在一个shell里面设置多个trtrap命令
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) SIGRTMAXshell 内部自定义的信号(伪信号)
EXIT 从一个函数中退出或整个脚本执行完毕
ERR 当一条命令返回非零状态时(代表命令执行不成功)
DEBUG 脚本中每一条命令执行之前
Linux信号简介
-
SIGHUP 本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联.
-
SIGINT 程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出
-
SIGQUIT 和SIGINT类似, 但由QUIT字符(通常是Ctrl-/)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号.
-
SIGILL 执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行数据段. 堆栈溢出时也有可能产生这个信号.
-
SIGTRAP 由断点指令或其它trap指令产生. 由debugger使用.
-
SIGABRT 程序自己发现错误并调用abort时产生.
-
SIGIOT 在PDP-11上由iot指令产生, 在其它机器上和SIGABRT一样.
-
SIGBUS 非法地址, 包括内存地址对齐(alignment)出错. eg: 访问一个四个字长的整数, 但其地址不是4的倍数.
-
SIGFPE 在发生致命的算术运算错误时发出.不仅包括浮点运算错误, 还包括溢出及除数为0等所有的算术的错误.
-
SIGKILL 用来立即结束程序的运行. 本信号不能被阻塞, 处理和忽略.
-
SIGUSR1 留给用户使用
-
SIGSEGV 试图访问未分配给自己的内存, 或试图往没有写权限的内存地址写数据.
-
SIGUSR2 留给用户使用
-
SIGPIPE Broken pipe
-
SIGALRM 时钟定时信号, 计算的是实际的时间或时钟时间. alarm函数使用该信号.
-
SIGTERM 程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理. 通常用来要求程序自己正常退出. shell命令kill缺省产生这个信号.
-
SIGCHLD 子进程结束时, 父进程会收到这个信号.
-
SIGCONT 让一个停止(stopped)的进程继续执行. 本信号不能被阻塞. 可以用一个handler来让程序在由stopped状态变为继续执行时完成特定的工作. 例如, 重新显示提示符
-
SIGSTOP 停止(stopped)进程的执行. 注意它和terminate以及interrupt的区别: 该进程还未结束, 只是暂停执行. 本信号不能被阻塞, 处理或忽略.
-
SIGTSTP 停止进程的运行, 但该信号可以被处理和忽略. 用户键入SUSP字符时(通常是Ctrl-Z)发出这个信号
-
SIGTTIN 当后台作业要从用户终端读数据时, 该作业中的所有进程会收到SIGTTIN信号. 缺省时这些进程会停止执行.
-
SIGTTOU 类似于SIGTTIN, 但在写终端(或修改终端模式)时收到.
-
SIGURG 有紧急数据或out-of-band数据到达socket时产生.
-
SIGXCPU 超过CPU时间资源限制. 这个限制可以由getrlimit/setrlimit来读取/改变
-
SIGXFSZ 超过文件大小资源限制.
-
SIGVTALRM 虚拟时钟信号. 类似于SIGALRM, 但是计算的是该进程占用的CPU时间.
-
SIGPROF 类似于SIGALRM/SIGVTALRM, 但包括该进程用的CPU时间以及系统调用的时间.
-
SIGWINCH 窗口大小改变时发出.
-
SIGIO 文件描述符准备就绪, 可以开始进行输入/输出操作.
-
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 变量。
-
-
shell中的信号捕获trap(shell 进阶)
2021-12-28 15:13:24目录 trap的基础概念 定义一个trap 忽略信号 重置信号 trap的实例 ...快捷键:CTRL+(C、Z、\):对于脱离了终端的后台进程无效 ...接收到信号后,会等待正在执行的前台...交互式shell默认会自动忽略TERM信号。在任何...目录
快捷键: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:55shell——trap捕捉信号(附信号表) trap捕捉信号有三种形式 第一种:trap "commands" signal-list当脚本收到signal-list清单内列出的信号时,trap命令执行双引号中的命令. 例1 #!/bin/bash trap &... -
shell : trap 捕捉信号
2020-05-14 10:56:56linux shell脚本中处理信号的方法 trap是一个shell内建命令,它用来在脚本中指定信号如何处理。 常用参数 trap [-lp] [[arg] sigspec …] 格式:trap “commands” signals 当shell接收到signals指定的信号时,... -
shell中信号的捕捉(trap)
2019-01-01 18:08:42(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 究竟采用... -
linux 信号 core,Shell 信号发送与捕捉
2021-05-18 03:34:19原标题:Shell 信号发送与捕捉作者:李振良OK1、Linux信号类型信号(Signal):信号是在软件层次上对中断机制的一种模拟,通过...2)捕捉信号。3)执行缺省操作,Linux对每种信号都规定了默认操作。Linux究竟采用上述三... -
shell脚本进阶之信号的捕捉trap
2021-05-10 22:25:37shell脚本之信号的捕捉trap,翻译过来就是陷阱的意思,shell脚本中的陷阱是专门用来捕捉信号的。啥信号呢?比如经常使用的kill -9,kill -15,CTRL+C等都属于信号1、查看所有可用的信号trap -l或kill -l即可[root@... -
shell中trap捕捉到信号的处理
2021-05-17 13:26:42trap捕捉到信号之后,可以有三种反应方式:(1)执行一段程序来处理这一信号(2)接受信号的默认操作(3)忽视这一信号二. trap对上面三种方式提供了三种基本形式:第一种形式的trap命令在shell接收到signal list清单中... -
为shell布置陷阱:trap捕捉信号方法论
2021-05-17 13:22:17本文目录: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对每种信号都规... -
linux shell trap捕捉信号 附信号表 SIGTERM SIGKILL
2020-03-15 10:15:52trap捕捉信号有三种形式 第一种: trap "commands" signal-list 当脚本收到signal-list清单内列出的信号时,trap命令执行双引号中的命令. 例1 #!/bin/bash trap "echo 123" 15 while true do echo abc sleep 5 ... -
shell脚本进阶之信号的捕捉
2021-05-17 12:43:50shell脚本之信号的捕捉 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:352.捕捉信号 [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 信号(利用信号处理进程、控制shell脚本)
2022-01-04 15:24:06一、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:41Bash脚本可以通过在脚本中添加trap命令来捕获执行中收到的信号,并且trap后面可以指定收到信号后的操作:trap commonds signals注:感觉类似一个钩子,捕获信号然后按照既定的操作执行。示例:1、捕获Ctrl+C命令,...