node代码打包为 exe文件---端口进程关闭demo
最近用到 java,用tomcat起的服务,经常服务关了,对应的进程还在跑,导致再次启动服务失败,需要手动关闭进程。
使用 dos命令虽然只有两行,总是输,也很烦。
netstat -ano | findstr 8080 //查找8080端口,对应的进程 taskkill /pid 5684 /f //关闭进程 5684
于是就想着,写一个 .bat 的文件,每次直接点击一下就好,可惜 dos命令玩不熟,折腾一番,决定放弃,换自己熟悉的语言 node来,然后使用 pkg 将node文件打包为 .exe 文件;
node版本太低不行,反正我的 7.16失败,后面安装了 8.x才行
npm install -g pkg
npm i node-cmd
index.js
var cmd=require('node-cmd');
process.stdin.resume();
process.stdin.setEncoding('utf-8');
process.stdout.write('请输入端口:'); //标准输出
process.stdin.on('data', function (data) {
var str = data.slice(0, -2);
process.stdin.emit('end');
var num = parseInt(str);
if(num){
getProcessId(num);
}else{
process.stdout.write('输入的端口无效:'+str);
}
});
process.stdin.on('end', function () {
});
function getProcessId(port){
cmd.get(
'netstat -ano | findstr '+ port, //查找端口对应的进程
function(err, data, stderr){
//console.log(err, data, stderr);
if(err){
process.stdout.write(port +"端口没有被占用");
}else{
var arr = data.split("\r\n");
var cache = {};
for(var i = 0; i < arr.length; i++){
var item = arr[i];
if(item){
var pid = getPid(item);//提取出的进程id
pid = parseInt(pid);
console.log(item);
//console.log(port);
if(pid && !cache[pid]){
cache[pid] = true; //防止重复的杀进程
console.log("开始关闭进程:"+pid)
killProcess(pid);
}
}
}
}
cmd.get(
'PAUSE', //等待..
function(err, data, stderr){
});
});
//taskkill /pid 13064 /f
cmd.run('touch example.created.file');
}
function getPid(item){
var p = '';
for(var i = item.length -1; i > 0 ; i--){
if(item[i] == ' '){
return item.substring(i);
}
}
return 0;
}
function killProcess(pid){
cmd.get(
'taskkill /pid '+ pid +' /f', //杀掉对应的进程
function(err, data, stderr){
if(err){
console.log(err);
}else{
console.log("关闭"+pid+"进程成功");
}
});
}
打包命令:注意node版本不能太低
pkg -t win index.js

打包完成之后,直接双击运行,输入端口,就会关掉对应的进程
关闭 进程,还可以用node子进程来实现
const c = require('child_process');
process.stdin.resume();
process.stdin.setEncoding('utf-8');
process.stdout.write('请输入端口:'); //标准输出
process.stdin.on('data', function (data) {
var str = data.slice(0, -2);
process.stdin.emit('end');
var num = parseInt(str);
if(num){
getProcessId(num);
}else{
process.stdout.write('输入的端口无效:'+str);
}
});
process.stdin.on('end', function () {
});
function getProcessId(port){
c.exec(`netstat -ano|findstr ${port}`, function(error, stdout, stderr){
if(error){
console.log("该端口没有被占用");
}else{
var arr = stdout.split("\r\n");
var cache = {};
for(var i = 0; i < arr.length; i++){
var item = arr[i];
if(item){
var pid = getPid(item);//提取出的进程id
pid = parseInt(pid);
if(pid && !cache[pid]){
cache[pid] = true; //防止重复的杀进程
console.log("开始关闭进程"+pid)
killProcess(pid);
}
}
}
}
c.exec("pause",function(){
});
});
}
function getPid(item){
var p = '';
for(var i = item.length -1; i > 0 ; i--){
if(item[i] == ' '){
return item.substring(i);
}
}
return 0;
}
function killProcess(pid){
c.exec(`taskkill /pid ${pid} /f`,function(error, stdout, stderr){
if(error){
console.log(error);
}else{
console.log("关闭"+pid+"进程成功");
}
})
}
node代码打包为 exe文件---端口进程关闭demo的更多相关文章
- 32-python代码打包成exe文件-pyinstaller
安装 pyinstaller: pip install pyinstall 简单使用 最简单的使用方式是运行 pyinstaller myscript.py 来生成可执行文件,其中 myscript. ...
- python代码打包成exe文件
1.准备工作 1.安装pywin32.pyinstaller 2.准备好ico文件 找一个png格式的图片,使用png2ico脚本生成包含以下6个尺寸的ico文件:128×128 64×64 48×4 ...
- win7下用PyInstaller把Python代码打包成exe文件
2013-11-05 22:02:14| 1.安装 使用PyInstaller需要安装PyWin32. 下载与Python对应的PyInstaller版本,解压后就算安装好了. 例如,安装了PyI ...
- 将Java代码打包成jar文件转换为.exe可执行程序方法
做完学生管理系统后我想将代码打包成一个可执行程序,那样就可以直接点击在Windows下运行了,下面就跟大家分享下打包方法. 将Java的代码转换成 .exe 文件需要先把代码打包成 jar 文件然 ...
- 控件注册 - 利用资源文件将dll、ocx打包进exe文件(C#版)
原文:控件注册 - 利用资源文件将dll.ocx打包进exe文件(C#版) 很多时候自定义或者引用控件都需要注册才能使用,但是如何使要注册的dll或ocx打包到exe中,使用户下载以后看到的只是一个e ...
- Python笔记(一):安装+爬虫环境配置+打包为EXE文件
1. 安装 https://www.python.org/downloads/windows/ 到官网下载安装程序 Windows x86 32位操作系统 Windows x8 ...
- Pyinstaller (python打包为exe文件)
需求分析: python脚本如果在没有安装python的机器上不能运行,所以将脚本打包成exe文件,降低脚本对环境的依赖性,同时运行更加迅速. 当然打包的脚本似乎不是在所有的win平台下都能使用,wi ...
- Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小demo mysql循环插入数据、生成随机数及CONCAT函数 .NET记录-获取外网IP以及判断该IP是属于网通还是电信 Guid的生成和数据修整(去除空格和小写字符)
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer Advanced Installer :Free for 30 da ...
- 将 Python3 文件打包成 exe 文件
我们用 Python 写好的代码,如何给别人在没有配置 Python 环境的情况下直接使用呢?尤其是面向 windows 众. 因为 Python 是一门解释性的语言,离开了 Python 解释器,P ...
随机推荐
- hdu2594 Simpsons' Hidden Talents【next数组应用】
Simpsons’ Hidden Talents Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...
- Python学习笔记之--我又开始学习Python了(随时更新)
2019.02.09 更新 Python 学习计划已经开始几天了,跟着一本叫<Django for beginner>的书籍在学习用Django搭建自己的第一个网站,目前已经进行到第三章, ...
- php后台对接ios,安卓,API接口设计和实践完全攻略,涨薪必备技能
2016年12月29日13:45:27 关于接口设计要说的东西很多,可能写一个系列都可以,vsd图都得画很多张,但是由于个人时间和精力有限,所有有些东西后面再补充 说道接口设计第一反应就是r ...
- 将音乐生成波浪图形,JavaScript Html5
x 省略废话(N+)... Windows Media Palyer中的经典波浪形 自己也行动手做一个,最好是JavaScript实现的, 搜索到了资源部分关键词"HTML5 频谱" ...
- .NET Core开发日志——WCF Client
WCF作为.NET Framework3.0就被引入的用于构建面向服务的框架在众多项目中发挥着重大作用.时至今日,虽然已有更新的技术可以替代它,但对于那些既存项目或产品,使用新框架重构的代价未必能找到 ...
- Django 模板 语法 变量 过滤器 模板继承 组件 自定义标签和过滤器 静态文件相关
本节目录 一 语法 二 变量 三 过滤器 四 标签Tags 五 模板继承 六 组件 七 自定义标签和过滤器 八 静态文件相关 一 语法 模板渲染的官方文档 关于模板渲染你只需要记两种特殊符号(语法 ...
- 深入 Vue 生命周期
深入 Vue 生命周期 这篇博客将会从下面四个常见的应用诠释组件的生命周期,以及各个生命周期应该干什么事 1.单组件的生命周期 2.父子组件的生命周期 3.兄弟组件的生命周期 4.宏mixin的生命周 ...
- 2017年蓝桥杯省赛A组c++第6题(字符串匹配算法填空)
/* 标题:最大公共子串 最大公共子串长度问题就是: 求两个串的所有子串中能够匹配上的最大长度是多少. 比如:"abcdkkk" 和 "baabcdadabc" ...
- Lua 变量名词
UpValue Lua中的函数是一阶类型值(first-class value),定义函数就象创建普通类型值一样(只不过函数类型值的数据主要是一条条指令而已),所以在函数体中仍然可以定义函数.假设函数 ...
- Java之旅_面向对象_接口
参考摘自:http://www.runoob.com/java/java-interfaces.html 接口(interface)在Java中是一个抽象类型,是抽象方法的集合. 一个类通过imple ...