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 ...
随机推荐
- java封装实现Excel建表读写操作
对 Excel 进行读写操作是生产环境下常见的业务,网上搜索的实现方式都是基于POI和JXL第三方框架,但都不是很全面.小编由于这两天刚好需要用到,于是就参考手写了一个封装操作工具,基本涵盖了Exce ...
- asp.net C#绘制太极图
成品图: html页面: 注意设置 ContentType="Image/Jpeg" <%@ Page Language="C#" AutoEventWi ...
- Chronic sleep loss cannot be cured that easily
Chronic sleep loss cannot be cured that easily Sleeping in on Saturday after a few weeks of too litt ...
- bytes和str的区别与转换
bytes和str的区别 1.英文 b'alex'的表现形式与str没什么两样 2.中文 b'\xe4\xb8\xad'这是一个汉字在utf-8的bytes表现形式 3.中文 b'\xce\xd2'这 ...
- [No000014E]提问的智慧How To Ask Questions The Smart Way
原文版本历史 目录 声明 简介 在提问之前 当你提问时 慎选提问的论坛 Stack Overflow 网站和 IRC 论坛 第二步,使用项目邮件列表 使用有意义且描述明确的标题 使问题容易回复 用清晰 ...
- Chap2:区块链基本技术[《区块链中文词典》维京&甲子]
- 内部排序->选择排序->简单选择排序
文字描述 简单排序的基本思想是:每一趟在n-i+1(i=1,2,…,n)个记录中选取关键字最小的记录作为有序列表中的第i个记录. 示意图 略 算法分析 简单排序算法中,所需进行记录移动的操作次数较少, ...
- 12.2RAC搭建记录
12.2RAC环境搭建记录 安装前资源检查 资源限制要求/etc/security/limits.conf Table 6-1 Installation Owner Resource Limit Re ...
- mysql报错Establishing SSL connection without server's identity verification is not recommended
使用mysql数据库时报错:Establishing SSL connection without server's identity verification is not recommended ...
- win10下切换多个jdk版本
1.每次切换时,修改JAVA_HOME变量 2.编辑path环境变量,如图所示,将%JAVA_HOME%\jre\bin和%JAVA_HOME%\bin移到最上边 3.在控制面板中打开java控制面板 ...