小编Jol*_*lta的帖子

TERM的bash陷阱 - 我做错了什么?

鉴于此hack.c程序:

#include <stdio.h>
main()
{
 int i=0;
 for(i=0; i<100; i++) {
   printf("%d\n", i);
   sleep(5);
 }
}
Run Code Online (Sandbox Code Playgroud)

和这个hack.sh bash脚本:

#!/bin/bash
./hack
Run Code Online (Sandbox Code Playgroud)

如果我运行hack.sh,则会创建两个进程 - 一个用于bash,一个用于C任务.如果TERM信号被发送到bash进程,则C进程不受伤害.

现在,假设原始bash是使用Runtime.exec()从Java程序启动的,所以我对它的唯一控制是Process.destroy()(它将TERM发送到bash进程)?假设我希望 C进程与启动它的bash一起死掉?

我一直在用bash尝试这样的事情:

#!/bin/bash
trap "kill -TERM -$$; exit" TERM
./hack
Run Code Online (Sandbox Code Playgroud)

即一个陷阱子句,它捕获TERM信号并将其重新广播到整个进程组.这对我不起作用 - 其中包含该陷阱子句的bash进程忽略了 TERM信号.

我在这里错过了什么?

bash signals term bash-trap

6
推荐指数
1
解决办法
8239
查看次数

源文件如何继承陷阱DEBUG?

运行以下代码段:

#!/bin/bash

function preexec ()
{
    echo -e "\n-->preexec command: $BASH_COMMAND"
}
trap 'preexec' DEBUG

function testfunc ()
{
    echo "testfunc called $1"
}

testfunc "main"
source "source.sh"

exit 0
Run Code Online (Sandbox Code Playgroud)


其中source.sh是

#!/bin/bash

testfunc "source"
Run Code Online (Sandbox Code Playgroud)


得到:

-->preexec command: testfunc "main"
testfunc called main

-->preexec command: source "source.sh"
testfunc called source

-->preexec command: exit 0
Run Code Online (Sandbox Code Playgroud)


这意味着源文件中的每个命令都不会被DEBUG陷阱捕获.
事实上,如果我添加该行

trap 'preexec' DEBUG
Run Code Online (Sandbox Code Playgroud)

在source.sh内部作为第二行,一切都按照需要工作(源文件中的命令也被捕获).

如何将此作为默认行为,以避免为我需要提供的任何文件重复上述行?换句话说:有没有机会告诉源文件继承DEBUG陷阱?

debugging bash bash-trap

6
推荐指数
1
解决办法
1225
查看次数

适用于Android的任何AFSK库?(通过Android耳机插孔输入数据)

我正在尝试使用AFSK和微控制器实现音频插孔数据接口.

通过搜索,我看到了一些使用iPhone的实现,例如:http: //www.creativedistraction.com/demos/sensor-data-to-iphone-through-the-headphone-jack-using-arduino/comment -page-1 /#评论-243826

在那里他们使用了"Perceptive Development的SerialModem for iPhone",虽然它似乎包含一个hex文件和一个电路原理图?

通过搜索"AFSK Android库","FSK安卓库"或其他各种组合,我找不到任何东西.有没有人知道这些Android工具的良好来源?

或者,是否有一个库可以实现可用于解调数据的简化FFT?当然,你不想做一个完整的FFT,因为你只是想区分(从这里得到的想法:http://labs.perceptdev.com/how-to-talk-to-tin-can/)但是我确定有类似的东西

我查看了spandsp,http://www.soft-switch.org/,寻找更通用的DSP库.不确定这些是否可以在Android上使用.

谢谢你的帮助

audio android signal-processing frequency

6
推荐指数
0
解决办法
1437
查看次数

在"陷阱退出"中获取shell脚本的exitcode

我想在我的Bash脚本中进行清理操作,如下所示:

#! /bin/bash
set -eu
trap 'echo "E: failed with exitcode $?" 1>&2' ERR

true
false
Run Code Online (Sandbox Code Playgroud)

使用$?脑海作为一种自然选择,但事实并非如此.它总是包含0.有什么方法可以"窥探" ERR陷阱中的exitcode 吗?

[更新:]我不知道我之前测试过的是什么.这段代码就像一个魅力,所以我把它留在这里作为一个小而好的例子.

bash shell exit-code bash-trap

6
推荐指数
1
解决办法
4397
查看次数

Bash:使用管道运算符时 Trap ERR 不起作用

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

脚本 1,不带管道:

$cat test.sh
#!/bin/bash

trap "echo Non-zero exit code detected!" ERR

function fail_please()
{
    echo "Returning non-zero exit code!"
    return 1
}

fail_please 
Run Code Online (Sandbox Code Playgroud)

输出1:

$ ./test.sh 
Returning non-zero exit code!
Non-zero exit code detected!
Run Code Online (Sandbox Code Playgroud)

脚本 2,带管道:

$ cat test.sh
#!/bin/bash

trap "echo Non-zero exit code detected!" ERR

function fail_please()
{
    echo "Returning non-zero exit code!"
    return 1
}

fail_please …
Run Code Online (Sandbox Code Playgroud)

linux bash pipe tee bash-trap

6
推荐指数
1
解决办法
2645
查看次数

检查是否在Bash中设置了陷阱

有没有办法检查trapBash中已设置的内容(在当前会话或脚本中)?

理想情况下,我希望能够获得trap分配给它们的信号列表,但如果不可能,我可以单独检查每个信号.

linux bash shell signals bash-trap

6
推荐指数
2
解决办法
1274
查看次数

使用PHP生成SNMP陷阱

我正在拼命寻找从PHP生成SNMP陷阱的方法.我知道使用snmpget的方法的构建,但我无法弄清楚如何发送SNMP陷阱.

有人知道它的类/代码片段吗?除了使用exec调用cli工具之外,搜索网络并没有提出任何其他内容,这对我来说绝对没有选择.

我怀疑使用socket_create和相应的功能来手动生成UDP包是必要的...

php snmp snmp-trap

5
推荐指数
2
解决办法
5270
查看次数

如果出现具有退出陷阱的脚本的shell错误,则将退出代码传播给调用者

如果带有EXIT陷阱的Bash脚本中出现语法错误,是否可以将退出代码传播给调用者?例如,如果我有:

#! /bin/bash

set -eu

trap "echo dying!!" EXIT

echo yeah
echo $UNBOUND_VARIABLE
echo boo
Run Code Online (Sandbox Code Playgroud)

然后,即使脚本没有真正成功结束,运行它也会提供退出代码0:

$ bash test.sh
yeah
test.sh: line 8: UNBOUND_VARIABLE: unbound variable
dying!!

$ echo $?
0
Run Code Online (Sandbox Code Playgroud)

但是如果我注释掉退出陷阱,则脚本返回1.或者,如果我使用返回非零(例如/bin/false)的命令替换带有未绑定变量的行,则该退出值将按照我希望的方式传播.

bash exit-code bash-trap

5
推荐指数
2
解决办法
4137
查看次数

如何将内核陷阱划分错误rsp:2b6d2ea40450转换为源位置?

客户报告我们的一个程序由于除零而导致错误.我们只有这个VLM系列:

kernel: myprog[16122] trap divide error rip:79dd99 rsp:2b6d2ea40450 error:0 
Run Code Online (Sandbox Code Playgroud)

我不相信有核心文件.

我通过互联网搜索了一下,我怎么能告诉导致这种除法的程序行为零,但到目前为止,我失败了.

我知道16122是程序的pid,所以这对我没有帮助.

我怀疑rsp:2b6d2ea40450与导致错误的行的地址(0x2b6d2ea40450)有关但是这是真的吗?

如果是,那么我怎样才能将它转换为源中的物理大致位置,假设我可以将myprog的调试版本加载到gdb中,然后请求显示该地址周围的上下文...

任何,任何帮助将不胜感激!

linux debugging gdb divide-by-zero

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

Azure 机器学习工作室 - 输入端口数据集未连接

我的错误

我想获取输入文件作为 Web 服务输入。但它说给出了错误“输入端口数据集未连接”。我想从用户那里获取输入文件并将模型结果发送回 ASP.NET 网页。请帮助如何做到这一点。以上是实验截图

web-services machine-learning azure

5
推荐指数
0
解决办法
637
查看次数