农业信息中心网站建设,微网站如何做,银川做网站最好的公司,望都网站建设我的GitHub#xff1a;Powerveil - GitHub 我的Gitee#xff1a;Powercs12 - Gitee 皮卡丘每天学Java 从前段开始遇到一个问题#xff0c;服务在启动的时候总是端口被占用#xff0c;发现还是Java程序#xff0c;但是当时并没有启动Java程序#xff0c;电脑出问题了。 一… 我的GitHubPowerveil - GitHub 我的GiteePowercs12 - Gitee 皮卡丘每天学Java 从前段开始遇到一个问题服务在启动的时候总是端口被占用发现还是Java程序但是当时并没有启动Java程序电脑出问题了。 一个办法是重启另一个办法就是手动杀掉进程。
第一种当然不推荐毕竟服务多起来重启电脑重启环境需要不少时间[痛]不能在这上面花费太多时间。
第二种方法是自己找
netstat -ano|findstr 端口号taskkill /F /PID 进程pid 如果每次查看删除进程都要先查看再删除这也没啥事最重要的是有时候忘记命令还要上网搜一下这个浪费时间。所以我准备写一个程序完成这项操作。本来写了个bat半成品脚本看到一片文章一句话直接放弃了。windows bat批处理脚本由于低成本、高效益从某种角度上说更像是一门艺术人们用其可以以更简单的方式完成复杂的任务。遗憾的是随着c、java、python、golang、javascript等高级语言的蓬勃发展选择使用传统脚本方式解决问题的人员越来越少甚至很多类脚本任务也通过perl或python等高级语言变通实现。
为啥不用高级编程语言编写非要再学一下bat脚本呢我决定使用Python来编写发现确实方便有现成的接口供调用。下面是Python代码。
import psutil
import redef get_process_by_port(port):# 创建一个集合用于存储已经发现的进程IDfound_pids set()# 创建一个列表用于存储找到的进程IDprocess_ids []for conn in psutil.net_connections(kindinet):if conn.laddr.port port:pid conn.pid# 如果当前进程ID已经在集合中则跳过if pid in found_pids:continuefound_pids.add(pid)try:process psutil.Process(pid)process_info {pid: process.pid, name: process.name()}process_ids.append(process_info)except psutil.NoSuchProcess:process_info {pid: pid, name: 未知}process_ids.append(process_info)return process_idsdef is_positive_integer(str):# 使用正则表达式判断字符串是否是大于零的整数return bool(re.match(r^[1-9]\d*$, str))def kill_processes(processes):if not processes:print(未找到该端口的进程)returnfor index, process in enumerate(processes):print(索引: {}, 进程ID: {}, 进程名称: {}.format(index 1, process[pid], process[name]))while True:flagStr str(input(是否删除该进程(Y/N删除下标默认第一个。[Y 1]或[1])))# print(flagStr: flagStr)index 0if is_positive_integer(flagStr[0]):flag Yindex int(flagStr[0]) - 1else:flag flagStr[0].upper()if len(flagStr) 3:index int(flagStr[2]) - 1if flag Y:process processes[index]psutil.Process(process[pid]).terminate()print(您已经删除了该进程)print(已删除进程信息索引: {}, 进程ID: {}, 进程名称: {}.format(index 1, process[pid], process[name]))breakelif flag N:print(您取消了删除进程)breakelse:print(是否删除该进程(Y/N删除下标默认第一个。[Y 1]或[1]))def main():while True:input_info input(请输入端口号输入N退出)if is_positive_integer(input_info):port_number int(input_info)processes get_process_by_port(port_number)kill_processes(processes)elif input_info.upper() N:exit()else:print(请输入正确的端口号)continueif __name__ __main__:main()