如何杀死 node.js 上的打开进程?
Posted
技术标签:
【中文标题】如何杀死 node.js 上的打开进程?【英文标题】:How to kill an open process on node.js? 【发布时间】:2012-07-01 20:07:58 【问题描述】:我正在尝试在 sublime 上为 Node.js 设置一个构建系统,所以我可以按 F7 在打开的文件上调用“节点”。问题是该进程将永远打开,因此,我第二次使用 F7 时,我得到了一个附加使用。
有没有办法可以从 node.js 中杀死打开的“node.exe”进程?
【问题讨论】:
stop all instances of node.js server的可能重复 【参考方案1】:如果你想杀死所有进程而不是:
sudo killall -9 node
如果你想杀死选定端口上的进程:
sudo kill sudo lsof -t -i:3100
那是端口3100
【讨论】:
【参考方案2】:与@Alex W 所说的类似,只要您有进程 ID 或 PID,就可以使用以下节点函数向进程发送终止信号:
process.kill(pid, [signal])
在我的例子中,当我生成 child_process().spawn.pid
时,我可以随时使用 PID。我已经对其进行了测试,它确实可以在 Win 7 x64 上运行。
【讨论】:
【参考方案3】:使用以下命令集来识别在给定端口上运行的进程并从命令行终止它
sudo fuser -v 5000/tcp // gives you the process running on port 5000
它将输出类似于下图的详细信息
USER PID ACCESS COMMAND
5000/tcp: almypal 20834 F.... node
然后使用
sudo fuser -vk 5000/tcp
终止进程。再次检查使用
sudo fuser -v 5000/tcp
确保进程已终止。
在 Windows 上,您可以使用以下步骤
C:\> tasklist // will show the list of running process'
Image Name PID Session Name Session# Mem Usage
System 4 console 0 236 K
...
node.exe 3592 console 0 8440 k
记下你的节点进程对应的PID,在本例中为3592。接下来运行taskkill终止进程。
C:\> taskkill /F /PID 3592
或/IM切换
C:\> taskkill /F /IM node.exe
【讨论】:
很好的答案,但是...对于 Windows? 好吧,只是注意到不完全是我要求的,但是可以从 node.js 使用命令,如果你稍微改变它们(从进程 ID 到进程名称),它会按照我的要求执行,所以这是我得到的最佳答案。 谢谢!这是在 cloud9 IDE 上运行以杀死 node.js 进程的唯一命令 对于windows来说要简单得多,只需打开任务管理器并按名称和end task
node.js进程排序
Windows 中的 taskkill 需要管理员权限才能运行。我们如何在 npm 脚本中做到这一点??【参考方案4】:
如果你说的 sublime 是 sublimeText 插件,我也有同样的问题,然后从 python 代码向 TCP 服务器发送消息“关闭”,然后
app.js
TCPserver
.on('connection', function(socket)
socket.pipe(require('through')
(function(data)
//----------------------------
if (data.toString() === 'shutdown')
process.exit();
//--------------------------
));
socket.end();
)
【讨论】:
【参考方案5】:从 Node.js 内部:
var die = function(quitMsg)
console.error(quitMsg)
process.exit(1);
die('Process quit');
有某些 methods available 用于退出,仅适用于 POSIX(即非 Windows),它们将通过进程 ID 退出进程。
另外,请注意,您可能可以使用此方法发送 kill() 信号,但这并不是说它不适用于 Windows:
process.kill(pid, [signal])
【讨论】:
但是我怎么知道其他正在运行的node.exe的pid呢? @Dokkatconsole.log('This process is pid ' + process.pid);
将从另一个 Node.exe 打印 pid,然后您使用该进程的 pid 的命令行参数执行新的,并在新脚本中发送 SIGTERM
到您在argv
中的pid。所有信息都可以在上面的链接中找到。
@Viclib 如果您仍然感兴趣,我实际上遇到了这个特定问题,我只需要使用process.kill(pid, [signal])
。如果您愿意,我可以提供更多信息。
@BlazeBiker 幸运的是,在这 4 年里,我实际上设法终止了这个过程。更不用说,我相信一些未来的读者会很高兴知道你的发现作为这个问题的答案!
只是为了添加更多细节,我还在下面的答案中发布了我的发现:***.com/a/36179604/2831961以上是关于如何杀死 node.js 上的打开进程?的主要内容,如果未能解决你的问题,请参考以下文章
Node.js 进程在 AWS Fargate 中的行为如何?