我想知道是否有人可以帮助这个?
我有一个bash脚本.它启动一个子流程,这是另一个基于gui的应用程序.然后bash脚本进入交互模式,从用户获取输入.这种交互模式无限期地继续.我希望它在子进程中的gui-application退出时终止.
我看过SIGCHLD,但这似乎不是答案.这是我尝试过的,但是当编程结束时我没有收到信号.
set -o monitor
"${prog}" &
prog_pid=$!
function check_pid {
kill -0 $1 2> /dev/null
}
function cleanup {
### does cleanup stuff here
exit
}
function sigchld {
check_pid $prog_pid
[[ $? == 1 ]] && cleanup
}
trap sigchld SIGCHLD
Run Code Online (Sandbox Code Playgroud)
更新了以下答案.我现在使用'nosid'的建议.我现在有另一个相关的问题,即随后的交互式过程是一个基本的菜单驱动过程,它阻止等待来自用户的键输入.如果子进程结束,则直到收到输入后才处理USR1信号.有没有办法强制立即处理信号?
等待看起来像这样:
stty raw # set the tty driver to raw mode
max=$1 # maximum valid choice
choice=$(expr $max + 1) # invalid choice
while [[ $choice -gt $max ]]; do
choice=`dd if=/dev/tty bs=1 count=1 …Run Code Online (Sandbox Code Playgroud) 似乎on_errorBash中的陷阱仅在其定义的函数范围内起作用.例如,运行此脚本
#!/bin/bash
on_error() {
echo 'on_error'
}
f() {
false
echo 'function f'
}
g() {
trap on_error ERR
echo 'function g'
false
f
}
g
Run Code Online (Sandbox Code Playgroud)
生产:
function g
on_error
function f
Run Code Online (Sandbox Code Playgroud)
有没有办法on_error全局陷阱,这样我就不必分别将它捕获到每个函数中?
我无法理解为什么我在Powershell中看到这种行为:
PS C:\> trap { "Got it!" } 1/0
Attempted to divide by zero.
At line:1 char:22
+ trap { "Got it!" } 1/0 <<<<
PS C:\> trap { "Got it!" } 1/$null
Got it!
Attempted to divide by zero.
At line:1 char:22
+ trap { "Got it!" } 1/$ <<<< null
Run Code Online (Sandbox Code Playgroud)
为什么一个表达式会触发陷阱而另一个表达式不会?
在某些调试器中,这称为变量上的"设置陷阱".我想要做的是在任何更改对象的语句上触发断点.或者更改对象的属性.
我有一个NSMutableDictionary,它获取了一个值/键,但我找不到任何可以这样做的语句.
运行以下代码:
#!/bin/bash
set -o pipefail
set -o errtrace
set -o nounset
set -o errexit
function err_handler ()
{
local error_code="$?"
echo "TRAP!"
echo "error code: $error_code"
exit
}
trap err_handler ERR
echo "wrong command in if statement"
if xsxsxsxs
then
echo "if result is true"
else
echo "if result is false"
fi
echo -e "\nwrong command directly"
xsxsxsxs
exit
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
wrong command in if statement
trap.sh: line 21: xsxsxsxs: command not found
if result is false
wrong command directly
trap.sh: …Run Code Online (Sandbox Code Playgroud) 我正在尝试计算并绘制随机信号的功率谱密度(PSD)。阅读的numpy 文档np.fft.fft,它提到 if A = fft(a)thennp.abs(A)是其幅度谱,np.abs(A)**2是其功率谱。
我的问题是,它是否负责对箱数等进行必要的划分(通常必须在 Matlab 中进行)以正确缩放?
例如,如果x我的原始信号以 V(伏特)为单位,我会这样做:
X = np.fft(x)
X = np.abs(X) #is that in Volts/Hz too?
#Do I have to divide by len(X) or anything else to scale it?
P = X**2 #is that in V^2/Hz? Do i have do do anything to scale it properly?
Run Code Online (Sandbox Code Playgroud)
我相信 numpy doc 可以对此进行更详细的阐述。在Matlab中我知道你必须自己处理它,但是在numpy中情况又如何呢?
我在几个地方(包括 SO)读过-e被认为是“糟糕的形式”并且在出现任何错误时退出脚本是不可靠的。处理错误的更好方法似乎是使用trap,例如:
trap "echo there was an error; exit 1;" ERR
Run Code Online (Sandbox Code Playgroud)
我似乎无法在手册页中找到ERR实际信号是什么?我假设它是,SIGQUIT但我无法确定。
man 7 signal
Run Code Online (Sandbox Code Playgroud)
只有您期望的正常信号SIGTERM SIGQUIT SIGINT等。
man trap
Run Code Online (Sandbox Code Playgroud)
有对ERR信号的引用,但似乎没有定义它。
例如:“ A trap on ERR, if set, is executed before the shell exits.”
man bash
Run Code Online (Sandbox Code Playgroud)
类似于man trapin that is 引用ERR但没有根据我所看到的来定义它。
捷径背后的实际信号是什么ERR?(在正常信号中,如 中所示man 7 signal)。
我更喜欢捕获实际的信号名称而不是速记版本,尽管我意识到它们会产生相同的结果(从脚本中的命令捕获任何错误,然后抛出到处理程序)。
出于测试目的,我试图使用snmptrap命令生成.1.3.6.1.2.1.43.18.2.0.1陷阱(打印机警报陷阱)。
我对snmptrap命令的语法不满意,所以有人可以向我解释如何正确使用此命令,如果可能的话,专门针对此陷阱?
我需要检测我的后台进程之一何时退出。因此,我安装了一个陷阱。run_gui并且run_ai1是简单的exec函数。
run_gui & gui_pid=$!
run_ai1 & ai1_pid=$!
trap 'echo foo' SIGCHLD
while true; do
echo "Started the loop"
while true; do
read -u $ai1_outfd line || echo "Nothing read"
if [[ $line ]]; then
: # Handle this
fi
done
while true; do
read -u $gui_outfd line || echo "nothing read"
if [[ $line ]]; then
: # Handle this
fi
done
done
Run Code Online (Sandbox Code Playgroud)
当我关闭 GUI 时,没有任何反应。该echo foo命令仅在我按 ctrl+c 时执行。
为什么我想念SIGCHLD?
我想计算来自 Spring Boot 2 应用程序的特定 URL 每秒的请求数,以及每个请求(延迟)所花费的时间(以毫秒为单位)。我们可以从 Actuator/Prometheus 中看到以下指标:
http_server_request_config_seconds_count
http_server_request_config_seconds_sum
Run Code Online (Sandbox Code Playgroud)
我很困惑如何在 Prometheus 中绘制它以获得我的结果。我需要添加直方图或分位数吗?
bash ×5
bash-trap ×4
linux ×3
command-line ×1
debugging ×1
fft ×1
if-statement ×1
lldb ×1
net-snmp ×1
nonblocking ×1
numpy ×1
powershell ×1
prometheus ×1
python ×1
scale ×1
shell ×1
sigchld ×1
signals ×1
snmp ×1
snmp-trap ×1
spring-boot ×1
watchpoint ×1
xcode4 ×1