热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python获取pid并杀死_荐python找到端口占用,并杀死进程,windows

有时候我们发现电脑上某个端口被占用了,这就导致启动不了一些服务。而每次手动去找到并杀死进程实在是麻烦,于是用python写个自动的来整活。除了使用常

有时候我们发现电脑上某个端口被占用了,这就导致启动不了一些服务。

而每次手动去找到并杀死进程实在是麻烦,于是用python写个自动的来整活。

除了使用常见的os模块,本文还有提供使用win32api的例子

主要面向windows平台

首先,已知用cmd执行 netstat -aon | findstr "端口号" 可以找到占用端口的进程pid

在python中可以使用 os 模块的 popen 方法执行cmd命令,如这样:

import os

result = os.popen('netstat -aon|findstr "443"')

返回的结果是一个文件对象,就像我们用open函数打开文件一样,需要读取它:

print(result.read())

当然也可以使用上下文管理器with,效果一样,写法更优雅:

with os.popen('netstat -aon|findstr "443"') as r:

result = r.read()

得到的结果就如下图,是字符串:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI2MzczOTI1,size_16,color_FFFFFF,t_70

于是进行解析,方便操作:

import os

with os.popen('netstat -aon|findstr "443"') as res:

res = res.read().split('\n')

result = []

for line in res:

temp = [i for i in line.split(' ') if i != '']

if len(temp) > 4:

result.append({'pid': temp[4], 'address': temp[1], 'state': temp[3]})

得到的结果成了这样:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI2MzczOTI1,size_16,color_FFFFFF,t_70

现在很方便操作了,因为我只需要部分数据,所以并没有取全部。

得到了进程pid,接下来是杀死进程。

还是可以通过执行cmd命令的方式来杀死进程,cmd命令:taskkill -pid 进程pid -f

依然可以用popen的方法去执行:

import os

result = os.popen("taskkill -pid 进程pid -f")

也可以使用win32api的TerminateProcess函数:

import win32api # 需要先pip install pywin32模块

handle = win32api.OpenProcess(1, False, "进程pid") # 获取进程句柄(pid类型为int!)

win32api.TerminateProcess(handle, 0) # 杀了它

win32api.CloseHandle(handle) # 关闭

这里说一下OpenProcess的第一个参数:

dwDesiredAccess,指的是进程访问权限

PROCESS_ALL_ACCESS //所有能获得的权限

PROCESS_CREATE_PROCESS //需要创建一个进程

PROCESS_CREATE_THREAD //需要创建一个线程

PROCESS_DUP_HANDLE //重复使用DuplicateHandle句柄

PROCESS_QUERY_INFORMATION //获得进程信息的权限,如它的退出代码、优先级

PROCESS_QUERY_LIMITED_INFORMATION /获得某些信息的权限,如果获得了PROCESS_QUERY_INFORMATION,也拥有PROCESS_QUERY_LIMITED_INFORMATION权限/

PROCESS_SET_INFORMATION //设置某些信息的权限,如进程优先级

PROCESS_SET_QUOTA //设置内存限制的权限,使用SetProcessWorkingSetSize

PROCESS_SUSPEND_RESUME //暂停或恢复进程的权限

PROCESS_TERMINATE //终止一个进程的权限,使用TerminateProcess

PROCESS_VM_OPERATION //操作进程内存空间的权限(可用VirtualProtectEx和WriteProcessMemory)

PROCESS_VM_READ //读取进程内存空间的权限,可使用ReadProcessMemory

PROCESS_VM_WRITE //读取进程内存空间的权限,可使用WriteProcessMemory

SYNCHRONIZE //等待进程终止

这里我们要结束进程,所以需要PROCESS_TERMINATE权限,也就是数字1

import win32con

win32con.PROCESS_TERMINATE # 也可以这样表示权限,更直观(返回结果是数字1)

同样,ctypes模块也可以做到上面这件事:

import ctypes

handle = ctypes.windll.kernel32.OpenProcess(1, False, "进程pid") # 同上(pid类型为int!)

ctypes.windll.kernel32.TerminateProcess(handle, -1)

ctypes.windll.kernel32.CloseHandle(handle)

哈哈,搞定了!

然后再说明一下TerminateProcess这个函数:

TerminateProcess(HANDLE hProcess,UINT uExitCode)

参数:

1、hProcess:要终止进程的句柄,需要先获取PROCESS_TERMINATE权限。

2、uExitCode:设置进程的退出值。可通过GetExitCodeProcess函数得到一个进程的退出值。

返回值:

如果失败将返回0,而成功将返回一个非零值。

本文结束~~~~



推荐阅读
  • Python已成为全球最受欢迎的编程语言之一,然而Python程序的安全运行存在一定的风险。本文介绍了Python程序安全运行需要满足的三个条件,即系统路径上的每个条目都处于安全的位置、"主脚本"所在的目录始终位于系统路径中、若python命令使用-c和-m选项,调用程序的目录也必须是安全的。同时,文章还提出了一些预防措施,如避免将下载文件夹作为当前工作目录、使用pip所在路径而不是直接使用python命令等。对于初学Python的读者来说,这些内容将有所帮助。 ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • 本文介绍了在Windows系统下安装Python、setuptools、pip和virtualenv的步骤,以及安装过程中需要注意的事项。详细介绍了Python2.7.4和Python3.3.2的安装路径,以及如何使用easy_install安装setuptools。同时提醒用户在安装完setuptools后,需要继续安装pip,并注意不要将Python的目录添加到系统的环境变量中。最后,还介绍了通过下载ez_setup.py来安装setuptools的方法。 ... [详细]
  • 使用C++编写程序实现增加或删除桌面的右键列表项
    本文介绍了使用C++编写程序实现增加或删除桌面的右键列表项的方法。首先通过操作注册表来实现增加或删除右键列表项的目的,然后使用管理注册表的函数来编写程序。文章详细介绍了使用的五种函数:RegCreateKey、RegSetValueEx、RegOpenKeyEx、RegDeleteKey和RegCloseKey,并给出了增加一项的函数写法。通过本文的方法,可以方便地自定义桌面的右键列表项。 ... [详细]
  • 本文介绍了NetCore WebAPI开发的探索过程,包括新建项目、运行接口获取数据、跨平台部署等。同时还提供了客户端访问代码示例,包括Post函数、服务器post地址、api参数等。详细讲解了部署模式选择、框架依赖和独立部署的区别,以及在Windows和Linux平台上的部署方法。 ... [详细]
  • python中安装并使用redis相关的知识
    本文介绍了在python中安装并使用redis的相关知识,包括redis的数据缓存系统和支持的数据类型,以及在pycharm中安装redis模块和常用的字符串操作。 ... [详细]
author-avatar
找唐娃娃_622
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有