相关疑难解决方法(0)

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

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

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

在Script-B.sh中,我捕获信号并调用函数Clean

陷阱'清洁'2

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

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

有没有想过发送SIGINT(ctrl-cVS kill -2 $pid_of_script)的两种方法之间的区别,以及如何将SIGINT从脚本发送到另一个?

问候,

调试器

bash signals kill bash-trap

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

杀死bash脚本不会杀死子进程

我编写了一个测试脚本,它运行另一个脚本来启动服务器测试.测试完成后SIGKILL,会向服务器进程发送一条消息,但是当再次运行测试脚本时,服务器会抛出一个EADDRINUSE错误(我在node.js环境中),这意味着服务器正在尝试挂载的端口当前正在使用.我们试图用a杀死的进程SIGKILL仍然在运行.我不认为这是一个特定于节点的问题,而是因为我对bash流程如何工作缺乏教育.

以下是一些细节,这是我的开始脚本scripts/start-node.sh:

#!/bin/bash

node_modules/.bin/babel-node --stage 0 index.js
Run Code Online (Sandbox Code Playgroud)

这是我的节点服务器调用index.js(我没有创建任何process事件监听器):

Http.createServer(…).listen(PORT, () => console.log(`Server listening on ${PORT}`))
Run Code Online (Sandbox Code Playgroud)

并且启动脚本由节点child_process模块控制:

var child = child_process.spawn('scripts/start-node.sh')
// Later…
child.kill('SIGKILL')
Run Code Online (Sandbox Code Playgroud)

bash process sigkill child-process node.js

10
推荐指数
1
解决办法
3133
查看次数

标签 统计

bash ×2

bash-trap ×1

child-process ×1

kill ×1

node.js ×1

process ×1

sigkill ×1

signals ×1