bash-trap相关内容

Bash Trap不会忽略信号

请考虑此bash脚本: #!/bin/bash trap '' INT echo sleep: sleep 5 echo rsync: rsync -a /usr/lib /var/tmp 如预期的那样,尝试使用ctrl-c中断睡眠失败。但rsync是可中断的(睡眠和rsync的顺序并不重要)?欢迎任何想法! 编辑: 发现了不同之处:rsync本身启动了两个子进程(我 ..
发布时间:2022-09-21 14:29:07 其他开发

保存和恢复陷阱状态?管理多个陷阱处理程序的简单方法?

什么是覆盖 bash 陷阱处理程序的好方法,这些处理程序不会永久践踏可能已经设置或尚未设置的现有处理程序?动态管理任意的陷阱例程链怎么样? 有没有办法保存陷阱处理程序的当前状态,以便以后恢复它们? 解决方案 在 Bash 中保存和恢复 Trap Handler 状态 我将提交以下堆栈实现来跟踪和恢复陷阱状态.使用这种方法,我可以推送陷阱更改,然后在完成后将它们弹出.这也可以用于 ..
发布时间:2022-01-22 12:47:17 其他开发

如何在if语句中捕获错误

运行以下代码: #!/bin/bash设置-o pipefail设置-o errtraceset -o名词集设置-o errexit函数err_handler(){本地error_code ="$?"回声“陷阱!"回显“错误代码:$ error_code"出口}陷阱err_handler错误回显"if语句中的错误命令"如果xsxsxsxs然后回显“如果结果为真"别的回显“如果结果为假"科幻ech ..
发布时间:2021-05-04 20:46:48 其他开发

陷阱无法捕获SIGSEGV

我正在使用此脚本测试陷阱: #!/bin/bash陷阱“回声段错误!"西格斯g ++ forever.cpp./a.out 并且 forever.cpp 只是运行一个递归函数: void forever(){永远();}int main(){永远();} 但是它会给出 Segmentation错误:11 ,而不是打印 segfault .我不确定为什么. 解决方案 trap ..
发布时间:2021-04-14 20:43:19 C/C++开发

Bash,评估中的CTRL + C不会中断主脚本

在我的bash脚本中,我正在运行一个存储在 $ cmd 变量中的外部命令.(可以是任何东西,甚至可以是一些简单的bash oneliner.) 如果在运行脚本时按下 ctrl + C ,我希望它杀死当前正在运行的 $ cmd ,但仍应继续运行主脚本.但是,我想保留在运行主脚本时使用 ctrl + C 杀死主脚本的选项. #!/bin/bashcmd ='read -p"Ooook?"某物; ..
发布时间:2021-04-14 20:19:52 其他开发

ERR背后的实际信号是什么

我已经在多个地方(包括SO)阅读到 -e 被认为是“不良形式",并且在出现任何错误时退出脚本都不可靠.处理错误的更好方法似乎是使用 trap ,例如: 陷阱“回显错误;退出1;"呃 我似乎无法在手册页中找到 ERR 的实际信号是什么?我假设它是 SIGQUIT ,但我不确定. man 7信号 只有您期望的正常信号 SIGTERM SIGQUIT SIGINT 等. man陷阱 ..
发布时间:2021-04-14 20:07:04 服务器开发

在“陷阱退出"窗口中获取shell脚本的退出代码.

我想在我的Bash脚本中执行清理操作,如下所示: #!/bin/bash设置-eutrap'echo"E:退出代码$失败?"1& 2'错误真的错误的 使用 $?是自然的选择,但事实并非如此.它始终包含 0 .我有什么办法可以“监视" ERR 陷阱中的退出代码? [更新:] 我不知道以前测试过什么.这段代码的工作原理很吸引人,因此我将其作为一个小巧的示例留在这里. 解决方案 您的 ..
发布时间:2021-04-14 20:04:04 其他开发

在USR1信号后可靠地终止睡眠过程

我正在编写一个Shell脚本,该脚本在从另一个进程接收到USR1信号时定期执行任务. 脚本的结构类似于此答案: #!/bin/bash陷阱“回声“做一些工作"" SIGUSR1尽管 :做睡觉10&&回声“做一些工作"&等待$!完毕 但是,此脚本的问题是睡眠过程在后台继续,并且仅在其超时时终止.(请注意,当在等待$!期间接收到USR1时,睡眠过程会延迟其常规超时,但确实会取消定期回声.) ..
发布时间:2021-04-14 19:58:27 服务器开发

Bash中陷阱的退出代码

这是 myscript.sh : #!/bin/bash功能mytrap {回声“被困!"}陷阱mytrap退出3号出口 当我运行它时: >./myscript.sh回声$?3 为什么脚本的退出代码带有陷阱的退出代码与没有陷阱的退出代码为何相同?通常,函数隐式返回最后执行的命令的退出代码.在这种情况下: echo返回0 我希望 mytrap 返回0 由于 mytrap 是最后 ..
发布时间:2021-04-14 19:51:08 其他开发

无法在后台shell中捕获SIGINT信号

在子进程/后台进程中运行时,我无法捕获信号. 这是我简单的bash脚本: #!/bin/bash回声“在儿童中"陷阱"got_signal"SIGINT函数got_signal {回声“被困"出口0}而[true];做睡2完毕 在运行此功能并稍后运行时 kill -SIGINT(pid) 一切正常,将打印被困并退出. 现在,如果我从这样的父脚本中启动相同的脚本: #!/ ..
发布时间:2021-04-14 19:30:15 其他开发

bash:为什么我不能在后台shell中设置SIGINT陷阱?

这是一个简单的程序,它注册了两个 trap 处理程序,然后使用 trap -p 显示它们.然后,它执行相同的操作,但是在子级后台进程中. 为什么后台进程会忽略 SIGINT 陷阱? #!/bin/bash回显“启动时的陷阱:"陷阱-p回声“"陷阱'回显“接收到的INT"'INT陷阱“回显“收到的条款""条款回显“在父级上设置的陷阱:"陷阱-p回声“"(回显“启动时的子陷阱:"陷阱-p回声“ ..
发布时间:2021-04-14 19:27:51 其他开发

bash使用陷阱SIGCHLD重新启动子过程?

我已经看到监视程序,这些脚本要么定期使用"ps"或“服务状态(在Linux上)"检查进程状态的脚本,要么在C/C ++中分叉并等待进程... 我想知道是否可以将bash与trap一起使用并在收到SIGCLD后重新启动子进程? 我已经按照以下想法在RedHat Linux上测试了一个基本套件(当然它是行不通的...) #!/bin/bash set -o monitor # can ..
发布时间:2020-09-19 01:55:18 其他开发

如何在Bash脚本中捕获退出代码

我的bash代码中有很多出口点.我需要在退出时进行一些清理工作,因此我使用了陷阱为退出添加了回调,如下所示: trap "mycleanup" EXIT 问题是退出代码不同,我需要做相应的清理工作.我可以在mycleanup中获得退出代码吗? 解决方案 我认为您可以使用$?获取退出代码. ..
发布时间:2020-09-19 00:20:44 其他开发

从外部禁用Linux程序的信号

在Linux上,是否可以通过某种方式禁用外部 ...程序的信号发送,即无需修改其源代码? 上下文: 我正在从Linux上的bash脚本中调用C(以及Java )程序.我不希望我的bash脚本以及该脚本启动的其他程序(作为前台进程)受到任何干扰. 虽然我可以使用... trap '' INT 在我的bash脚本中 ...禁用Ctrl C信号,这仅在程序控件恰好在bash ..
发布时间:2020-07-22 21:01:25 服务器开发

保存并恢复陷阱状态?管理陷阱的多个处理程序的简便方法?

有什么好方法可以覆盖bash陷阱处理程序,这些处理程序不会永久性破坏可能已设置或尚未设置的现有处理程序?动态管理陷阱例程的任意链怎么办? 有没有一种方法可以保存陷阱处理程序的当前状态,以便以后可以恢复它们? 解决方案 在Bash中保存和还原陷阱处理程序状态 我将提交以下堆栈实现以跟踪和恢复陷阱状态.使用这种方法,我可以推送陷阱更改,然后在完成处理后将其弹出.这也可以用于将许多陷 ..
发布时间:2020-07-18 02:19:52 其他开发

Perl在bash中捕获Ctrl-C(sigint)

我正在阅读我们如何捕获CTRL ^ C-Perl僧侣,但是我似乎无法获得正确的信息来解决我的问题. 问题是-我有一个无限循环,并且在终端显示了“多行"打印输出(我知道我会被告知使用ncurses-但对于简短的脚本,我会更自在写一堆printf s ).我想以这种方式捕获Ctrl-C,以使脚本仅在完成多行打印输出后 终止. 脚本为(Ubuntu Linux 11.04): #!/u ..
发布时间:2020-07-07 02:48:36 其他开发

重击:使用管道运算符时,陷阱ERR不起作用

我试图将来自stdout和stderr的所有内容记录到日志文件中,并且仍然保留控制台.为此,我仅在每个命令后附加:|& tee -a log_file.log. 但是,如果脚本执行过程中发生任何错误,我也想运行自定义命令.为此,我在脚本的开头添加了以下内容:trap "echo Non-zero exit code detected" ERR. 问题是通过使用管道运算符,陷阱中的回声不再执行. ..
发布时间:2020-05-28 00:31:19 服务器开发

Shell脚本使用陷阱获取CTRL + Z

我正在尝试在脚本的trap中获取SIGSTOP CTRL + Z 信号. 我的脚本正在执行时,如果我暂时中止,请发送SIGSTOP信号 CTRL + Z ,它需要删除我在其中创建文件并终止执行. 我不明白为什么以下脚本不起作用.但是,更重要的是,正确的方法是什么? #!/bin/bash DIR="temp_folder" trap "rm -r $DIR; kill -SIG ..
发布时间:2020-05-01 09:47:08 服务器开发

如何通过一组脚本传播信号?

我有一组由主要脚本控制的脚本.我想在主脚本中捕获信号 ctrl + c 并将其传播给其他脚本.其他脚本也应该(从主脚本中)捕获该信号并进行一些清理... 我尝试将kill -s SIGINT发送给子级,但是他们似乎无法捕获信号(即使在子级脚本中定义了trap 'Cleanup' SIGINT) 任何线索如何实现这一目标? 解决方案 以下示例演示了一个父脚本,该脚本在启动两个自己 ..
发布时间:2020-04-26 09:44:12 其他开发