问题标签 [bash-trap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
9686 浏览

makefile - 如何在 GNU make 中捕获错误和中断?

我想知道是否有一种方法可以trap在 GNU中实现make,类似于内置的BASH

如果用户按下CTRL-C,或者如果make它本身失败(非零退出),我想调用一个特定的目标或宏。

0 投票
1 回答
9500 浏览

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

鉴于这个 hack.c 程序:

还有这个 hack.sh bash 脚本:

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

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

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

即捕获 TERM 信号并将其重新广播到整个进程组的陷阱子句。这对我不起作用 - 带有该陷阱子句的 bash 进程会忽略TERM 信号。

我在这里想念什么?

0 投票
2 回答
12795 浏览

bash - 是否可以在 bash 中检测 *which* 陷阱信号?

可能重复:
在 bash shell 脚本中识别接收到的信号名称

当使用类似的东西trap func_trap INT TERM EXIT时:

功能块中有没有办法检测哪个陷阱调用了它?

就像是:

或者我是否需要为每种不同的陷阱类型编写一个单独的函数?是否有一个保存最新接收信号的 bash 变量?

提前致谢!

0 投票
2 回答
17233 浏览

bash - 如何从脚本向脚本发送信号 SIGINT?

我想捕获从 Script-A.sh 发送到 Script-B.sh 的信号,所以在 Script-A.sh 中我使用以下命令:

(向 Script-B.sh 发送 SIGINT)
kill -2 $PID_Script-B.sh

在 Script-B.sh 我捕捉到信号并调用函数 Clean

陷阱“清洁”2

它不起作用,而是立即杀死 Script-B.sh 而不执行 Clean !!

我还注意到,如果我想将 SIGINT 从终端发送到任何捕获它的脚本,actrl-c将被正确捕获,但如果我通过命令指定信号则不会kill -2 $pid_of_script

ctrl-c关于发送 SIGINT ( VS )的两种方法之间的区别kill -2 $pid_of_script以及如何将 SIGINT 从脚本发送到另一个的任何想法?

0 投票
4 回答
9561 浏览

bash - 如何通过脚本集合传播信号?

我有一组由主要脚本控制的脚本。我想在主脚本中捕获信号ctrl+c并将其传播给其他脚本。其他脚本也应该捕获这个信号(来自主脚本)并进行一些清理......

我试图发送kill -s SIGINT给孩子们,但他们似乎无法捕捉到信号(即使trap 'Cleanup' SIGINT是在孩子们的脚本上定义的)

任何线索如何实现这一点?

0 投票
19 回答
38926 浏览

bash - 同一信号的多个 Bash 陷阱

当我trap在 Bash 中使用命令时,trap给定信号的前一个将被替换。

有没有办法trap为同一个信号产生不止一次的火灾?

0 投票
1 回答
1065 浏览

bash - 如何在陷阱代码中再次设置 bash 陷阱?

我有一个被调用的 bash 函数必须在第一次调用后被 EXIT 陷阱调用。该函数将再次设置陷阱以在函数退出后立即触发。

我遇到的问题是陷阱只触发一次,换句话说doStuff只执行了两次。

我不使用简单的 for 循环来执行doStuff k时间的原因是,我实际上launchNextExperiment为我的 CPU 子集的每个调用该函数一次,并且一次只希望一个实例doStuff在 CPU 上运行,因为它非常处理密集的。这也是我有互斥锁的原因。然后,一旦一个实例doStuff返回,我就想启动下一个k实例doStuff(实际上它们都是不同的模拟)。

如何确保为每个嵌套的子 shell 设置了陷阱,最后launchNextExperiment是执行时间,但每个 CPUk只有一个?doStuff

0 投票
5 回答
9908 浏览

linux - Linux 程序的外部禁用信号

在 Linux 上,是否有可能以某种方式在外部禁用程序的信号发送……也就是说,不修改它们的源代码?

语境:

我正在 Linux 上的 bash 脚本中调用 C(以及 Java)程序。我不希望我的 bash 脚本和脚本启动的其他程序(作为前台进程)有任何中断。

虽然我可以使用...

...在我的 bash 脚本中禁用 Ctrl C 信号,这仅在程序控件恰好位于 bash 代码中时才有效。也就是说,如果我在 C 程序运行时按 Ctrl C,C 程序就会中断并退出!这个 C 程序正在执行一些关键操作,因此我不希望它被中断。我无权访问该 C 程序的源代码,因此 C 程序内部的信号处理是不可能的。

问候,

/HS

0 投票
1 回答
660 浏览

bash - 如果你`source`另一个文件,之前定义的`trap INT`不起作用?

如果我把它放在 Bash 脚本的顶部,Control+C 不起作用。

但是如果我把它放在几行之后,那么 Control+C 就会被困住。

更新

如果它放在 之后source "$HOME/.rvm/scripts/rvm",那么它可以工作。

因此,如果您获取另一个文件,trap INT之前定义的将不起作用?

0 投票
4 回答
3369 浏览

bash - 在 bash 中为已知 PID 的不同进程设置陷阱

我需要为我在后台启动的 bash 进程设置一个陷阱。后台进程可能会运行很长时间,并将其 PID 保存在特定文件中。

现在我需要为该进程设置一个陷阱,所以如果它终止,PID 文件将被删除。

有没有办法我可以做到这一点?

编辑#1

看来我对问题的描述不够准确。我可以完全控制所有代码,但是我拥有的长时间运行的后台进程是这样​​的:

当我现在在该语句所在的脚本开头添加陷阱时,$$将是那个更大脚本的 PID,而不是我从这里开始的这个小后台进程的 PID。

那么如何专门为该后台进程设置陷阱呢?