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,打开目录

打开目录

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

python获取进程pid并且杀掉进程_第1张图片
添加cp936

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

python获取进程pid并且杀掉进程_第2张图片
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')

你可能感兴趣的:(python获取进程pid并且杀掉进程)