python获取pid并杀死_python获取进程pid并且杀掉进程

python程序退出方式

sys.exit()

执行该语句会直接退出程序,这也是经常使用的方法,也不需要考虑平台等因素的影响,一般是退出Python程序的首选方法。

该方法中包含一个参数status,默认为0,表示正常退出,也可以为1,表示异常退出。

import sys

sys.exit()

sys.exit(0)

sys.exit(1)

os._exit()

效果也是直接退出,不会抛出异常,但是其使用会受到平台的限制,但我们常用的Win32平台和基于UNIX的平台不会有所影响。

os.kill()

一般用于直接Kill掉进程,但是只能在UNIX平台上有效。

Windows下Kill进程

既然在Linux下能够进行上述操作,那么Windows下也能够有相关的操作。

这里使用的是os.popen(), 该方法是用于直接执行系统命令,而在Windows下其实就是使用taskkill来kill掉进程,其基本形式是,

taskkill /pid 程序的PID号码

import os

if __name__ == "__main__":

pid = 620

os.popen('taskkill.exe /pid:'+str(pid))

这里我们采取第四种方式,获取进程的pid,然后执行cmd命令

def getChildrenPidsOfPid():

"""Returns the children pids of a pid"""

newpidcnt = 0

pid = 0

wmi = win32com.client.GetObject('winmgmts:')

for win32_process_instance in wmi.InstancesOf('win32_process'):

if win32_process_instance.Name and win32_process_instance.Name.upper() == "HuaYang.exe".upper():

pTime = win32_process_instance.Properties_('CreationDate').Value

processId = int(win32_process_instance.Properties_('ProcessId'))

if pTime > 5:

newpidcnt = newpidcnt + 1

pid = processId

if newpidcnt > 2:

raise RuntimeError("error")

print pid

return pid

def kill(pid):

try:

# command = 'taskkill /F /IM %d' %pid

# print type(command)

# os.system(command) #1111

import subprocess

subprocess.Popen("cmd.exe /k taskkill /F /T /PID %i"%pid , shell=True)

except OSError, e:

print 'no process'

执行111处时,会出现提示Decode error - output not utf-8

具体原因:

python在编译运行源码后,默认将输出结果以cp936编码,发送给Sublime Text。而Sublime Text 中python build的默认接收编码是UTF-8。Sublime Text在接收到python输出后,试图以utf-8解码cp936编码的流。当cp936编码的流中没有汉字时,因为英文字符集在cp936和utf-8中的编码兼容,所以用utf-8解码不会出错;当cp936编码的流中有汉字时,因为汉字字符集在cp936与utf-8的编码不兼容,所以用utf-8解码就会错误。最终Sublime Text就会报[Decode error - output not utf-8]错误。

解决方法:

方法1. Python有个PythonIoEncoding环境变量,用来定义stdin/stdout/stderr的编码。windows下,cmd中执行python -h 可以看到该环境变量的说明。所以可以在环境变量下,添加一个环境变量pythonioencoding,值为utf-8,即可解决该问题。

方法2.修改Sublime Text的python build的设置。将其编码设置为cp936。

1.先找到Python.sublime-build文件,Preferences->Browse Packages,打开目录

f8a650e7aeb7

打开目录

2.进入对应语言目录,找到*.sublime-build文件,并按截图添加语句

f8a650e7aeb7

添加cp936

sublime执行cmd命令时,经常会碰到 不是内部

f8a650e7aeb7

Paste_Image.png

后来换一个IDE就可以,估计是sublime这里对cmd命令的权限有点问题。如果哪位知道怎么回事,可以联系我怎么回事。

查询windows的pid 并且杀掉进程

查看占用指定端口的程序 **

netstat –ano|findstr “指定端口号”

如:查询占用了8080端口的进程:netstat -ano|findstr "8080"**

使用命令杀死进程1>首先找到进程号对应的进程名称tasklist|findstr 进程号如:tasklist|findstr 3112

然后根据进程名称杀死进程taskkill /f /t /im 进程名称如:taskkill /f /t /im /javaw.exe

执行系统命令的几种方式:

os.system()

import os

cmd = 'ipconfig'

os.system(cmd)

class subprocess.Popen

import subprocess

subprocess.Popen(command, shell=True)

如果command不是一个可执行文件,shell=True不可省。

打开网页

import webbrowser

webbrowser.open('http://www.google.com')

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值