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文件,并按截图添加语句

添加cp936

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

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')

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 字符集和编码简介 在编程中常常可以见到各种字符集和编码,包括ASCII,MBCS,Unicode等字符集。确切的说...
    兰山小亭阅读 8,649评论 0 13
  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 4,799评论 0 11
  • 本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入...
    小小不懂11阅读 3,459评论 2 30
  • 几个基本概念 bit二进制位, 是计算机内部数据储存的最小单位,11010100是一个8位二进制数。一个二进制位只...
    西电大侠阅读 3,601评论 1 8
  • 常用 提高python编码效率 赋值 列表推导式 列表解析表达式,类似[i*2 for i in list] 三元...
    今夕何夕_walker阅读 775评论 0 1