小编Jol*_*lta的帖子

当特定子进程终止时,如何在bash脚本中接收通知?

我想知道是否有人可以帮助这个?

我有一个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)

bash nonblocking child-process sigchld

4
推荐指数
1
解决办法
3672
查看次数

如何在全局中捕获bash中的on_error?

似乎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全局陷阱,这样我就不必分别将它捕获到每个函数中?

linux error-handling bash shell bash-trap

4
推荐指数
1
解决办法
632
查看次数

Powershell陷阱不会被持续触发

我无法理解为什么我在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)

为什么一个表达式会触发陷阱而另一个表达式不会?

error-handling powershell powershell-trap

3
推荐指数
1
解决办法
789
查看次数

如何在Xcode 4/lldb中找出更改对象(或简单变量)的内容?

在某些调试器中,这称为变量上的"设置陷阱".我想要做的是在任何更改对象的语句上触发断点.或者更改对象的属性.

我有一个NSMutableDictionary,它获取了一个值/键,但我找不到任何可以这样做的语句.

debugging watchpoint xcode4 lldb

3
推荐指数
1
解决办法
3909
查看次数

如何在 if 语句中捕获错误

运行以下代码:

#!/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)

error-handling bash if-statement bash-trap

3
推荐指数
1
解决办法
2975
查看次数

numpy 中信号的 PSD 以及如何缩放它

我正在尝试计算并绘制随机信号的功率谱密度(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中情况又如何呢?

python signal-processing numpy fft scale

3
推荐指数
1
解决办法
2万
查看次数

ERR 背后的实际信号是什么

我在几个地方(包括 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)。

我更喜欢捕获实际的信号名称而不是速记版本,尽管我意识到它们会产生相同的结果(从脚本中的命令捕获任何错误,然后抛出到处理程序)。

linux error-handling bash signals bash-trap

3
推荐指数
1
解决办法
1942
查看次数

使用snmptrap命令Linux发送通知陷阱SNMP

出于测试目的,我试图使用snmptrap命令生成.1.3.6.1.2.1.43.18.2.0.1陷阱(打印机警报陷阱)。

我对snmptrap命令的语法不满意,所以有人可以向我解释如何正确使用此命令,如果可能的话,专门针对此陷阱?

linux command-line snmp net-snmp snmp-trap

3
推荐指数
1
解决办法
2万
查看次数

进程退出时未传递 SIGCHLD

我需要检测我的后台进程之一何时退出。因此,我安装了一个陷阱。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

bash bash-trap

3
推荐指数
1
解决办法
749
查看次数

使用 Spring Boot Actuator 计算每秒请求数

我想计算来自 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 中绘制它以获得我的结果。我需要添加直方图或分位数吗?

spring-boot spring-boot-actuator prometheus

3
推荐指数
1
解决办法
5110
查看次数