问题标签 [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.
makefile - 如何在 GNU make 中捕获错误和中断?
我想知道是否有一种方法可以trap
在 GNU中实现make
,类似于内置的BASH
?
如果用户按下CTRL-C
,或者如果make
它本身失败(非零退出),我想调用一个特定的目标或宏。
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 信号。
我在这里想念什么?
bash - 是否可以在 bash 中检测 *which* 陷阱信号?
当使用类似的东西trap func_trap INT TERM EXIT
时:
功能块中有没有办法检测哪个陷阱调用了它?
就像是:
或者我是否需要为每种不同的陷阱类型编写一个单独的函数?是否有一个保存最新接收信号的 bash 变量?
提前致谢!
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 从脚本发送到另一个的任何想法?
bash - 如何通过脚本集合传播信号?
我有一组由主要脚本控制的脚本。我想在主脚本中捕获信号ctrl+c并将其传播给其他脚本。其他脚本也应该捕获这个信号(来自主脚本)并进行一些清理......
我试图发送kill -s SIGINT
给孩子们,但他们似乎无法捕捉到信号(即使trap 'Cleanup' SIGINT
是在孩子们的脚本上定义的)
任何线索如何实现这一点?
bash - 同一信号的多个 Bash 陷阱
当我trap
在 Bash 中使用命令时,trap
给定信号的前一个将被替换。
有没有办法trap
为同一个信号产生不止一次的火灾?
bash - 如何在陷阱代码中再次设置 bash 陷阱?
我有一个被调用的 bash 函数必须在第一次调用后被 EXIT 陷阱调用。该函数将再次设置陷阱以在函数退出后立即触发。
我遇到的问题是陷阱只触发一次,换句话说doStuff
只执行了两次。
我不使用简单的 for 循环来执行doStuff
k
时间的原因是,我实际上launchNextExperiment
为我的 CPU 子集的每个调用该函数一次,并且一次只希望一个实例doStuff
在 CPU 上运行,因为它非常处理密集的。这也是我有互斥锁的原因。然后,一旦一个实例doStuff
返回,我就想启动下一个k
实例doStuff
(实际上它们都是不同的模拟)。
如何确保为每个嵌套的子 shell 设置了陷阱,最后launchNextExperiment
是执行时间,但每个 CPUk
只有一个?doStuff
linux - Linux 程序的外部禁用信号
在 Linux 上,是否有可能以某种方式在外部禁用程序的信号发送……也就是说,不修改它们的源代码?
语境:
我正在 Linux 上的 bash 脚本中调用 C(以及 Java)程序。我不希望我的 bash 脚本和脚本启动的其他程序(作为前台进程)有任何中断。
虽然我可以使用...
...在我的 bash 脚本中禁用 Ctrl C 信号,这仅在程序控件恰好位于 bash 代码中时才有效。也就是说,如果我在 C 程序运行时按 Ctrl C,C 程序就会中断并退出!这个 C 程序正在执行一些关键操作,因此我不希望它被中断。我无权访问该 C 程序的源代码,因此 C 程序内部的信号处理是不可能的。
问候,
/HS
bash - 如果你`source`另一个文件,之前定义的`trap INT`不起作用?
如果我把它放在 Bash 脚本的顶部,Control+C 不起作用。
但是如果我把它放在几行之后,那么 Control+C 就会被困住。
更新:
如果它放在 之后source "$HOME/.rvm/scripts/rvm"
,那么它可以工作。
因此,如果您获取另一个文件,trap INT
之前定义的将不起作用?
bash - 在 bash 中为已知 PID 的不同进程设置陷阱
我需要为我在后台启动的 bash 进程设置一个陷阱。后台进程可能会运行很长时间,并将其 PID 保存在特定文件中。
现在我需要为该进程设置一个陷阱,所以如果它终止,PID 文件将被删除。
有没有办法我可以做到这一点?
编辑#1
看来我对问题的描述不够准确。我可以完全控制所有代码,但是我拥有的长时间运行的后台进程是这样的:
当我现在在该语句所在的脚本开头添加陷阱时,$$
将是那个更大脚本的 PID,而不是我从这里开始的这个小后台进程的 PID。
那么如何专门为该后台进程设置陷阱呢?