最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

杀死一个bash脚本不杀子进程

IT培训 admin 3浏览 0评论

杀死一个bash脚本不杀子进程

我已经写它运行另一个脚本来启动服务器来测试一个测试脚本。当测试完成运行测试脚本时SIGKILL消息被发送到服务器进程,但是服务器再次抛出一个EADDRINUSE错误(我在Node.js的环境),这意味着服务器正在尝试安装到港目前正在使用中。这个过程中我们想杀了SIGKILL仍在运行。我不相信这是一个节点具体问题,而是对于bash过程是如何工作的缺乏在我结束教育。

这里有一些细节,这是我的开始脚本调用scripts/start-node.sh

#!/bin/bash

node_modules/.bin/babel-node --stage 0 index.js

这是我的节点服务器称为index.js(我还没有撰写任何process事件侦听器):

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

和启动脚本进行控制节点child_process模块:

var child = child_process.spawn('scripts/start-node.sh')
// Later…
child.kill('SIGKILL')
回答如下:

杀死一个子进程和它所有的孩子,你可以使用process.kill与负pid(杀进程组)

var child = child_process.spawn('scripts/start-node.sh', {detached: true})
// Later…
process.kill(-child.pid, 'SIGKILL');

请参见有关child_process options.detached文档细节

在非Windows,如果分离的选项设置,子进程将作出一个新的进程组和会话的领导者。

这里引用的man 2 kill一些细节的部分内容:

如果pid为小于-1,则SIG被发送到每一个过程,其ID是-pid处理组中使用。


另一种选择可能是使用trap在你的shell脚本拦截信号,杀死所有的孩子们,并使用从child.kill('SIGTERM') node(如SIGKILL不会被trap拦截)

#!/bin/bash

trap 'kill $(jobs -p)' EXIT
node_modules/.bin/babel-node --stage 0 index.js

杀死一个bash脚本不杀子进程

我已经写它运行另一个脚本来启动服务器来测试一个测试脚本。当测试完成运行测试脚本时SIGKILL消息被发送到服务器进程,但是服务器再次抛出一个EADDRINUSE错误(我在Node.js的环境),这意味着服务器正在尝试安装到港目前正在使用中。这个过程中我们想杀了SIGKILL仍在运行。我不相信这是一个节点具体问题,而是对于bash过程是如何工作的缺乏在我结束教育。

这里有一些细节,这是我的开始脚本调用scripts/start-node.sh

#!/bin/bash

node_modules/.bin/babel-node --stage 0 index.js

这是我的节点服务器称为index.js(我还没有撰写任何process事件侦听器):

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

和启动脚本进行控制节点child_process模块:

var child = child_process.spawn('scripts/start-node.sh')
// Later…
child.kill('SIGKILL')
回答如下:

杀死一个子进程和它所有的孩子,你可以使用process.kill与负pid(杀进程组)

var child = child_process.spawn('scripts/start-node.sh', {detached: true})
// Later…
process.kill(-child.pid, 'SIGKILL');

请参见有关child_process options.detached文档细节

在非Windows,如果分离的选项设置,子进程将作出一个新的进程组和会话的领导者。

这里引用的man 2 kill一些细节的部分内容:

如果pid为小于-1,则SIG被发送到每一个过程,其ID是-pid处理组中使用。


另一种选择可能是使用trap在你的shell脚本拦截信号,杀死所有的孩子们,并使用从child.kill('SIGTERM') node(如SIGKILL不会被trap拦截)

#!/bin/bash

trap 'kill $(jobs -p)' EXIT
node_modules/.bin/babel-node --stage 0 index.js

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论