对于如何结束一个Python程序或者用Python操作去结束一个进程等,Python本身给出了好几种方法,而这些方式也存在着一些区别,对相关的几种方法看了并实践了下,同时也记录下。

参考:

Python 核心编程(第二版)

http://www.zhihu.com/question/21187839

 

1. sys.exit()

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

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


1 import sys
2 sys.exit()
3 sys.exit(0)
4 sys.exit(1)


该方法引发的是一个SystemExit异常(这是唯一一个不会被认为是错误的异常),当没有设置捕获这个异常将会直接退出程序执行,当然也可以捕获这个异常进行一些其他操作。

 

2. os._exit()

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

知乎上有说是调用了C 语言的 _exit() 函数(未考证)

 

3. os.kill()

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

基本原理:该函数是模拟传统的UNIX函数发信号给进程,其中包含两个参数:一个是进程名,即所要接收信号的进程;一个是所要进行的操作。

操作(第二个参数)的常用取值为:

SIGINT      终止进程     中断进程

SIGTERM   终止进程     软件终止信号

SIGKILL    终止进程      杀死进程

SIGALRM   闹钟信号

例:

在linux平台上打开VLC视频播放器,然后查看运行的进程:进程号是 4497

 

python结束进程 怎么结束python进程_UNIX

然后执行os.kill操作:

python结束进程 怎么结束python进程_python结束进程_02

执行完之后可以发现VLC视频播放器已经关闭,同时该进程也已经被Kill了。


 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

下边是用os.kill()来关闭程序的两个例子,似乎windows 下也能用

 #! /usr/bin/python 
 
 # -*- coding: utf-8 -*- 

    
 
 import 
 os 
 
 import 
 sys 
 
 import 
 signal 

    
 
 def 
 kill(pid): 

    
 
    
 try 
 : 
 
      
 a  
 = 
 os.kill(pid, signal.SIGKILL) 
 
      
 # a = os.kill(pid, signal.9) # 与上等效 
 
      
 print 
 '已杀死pid为%s的进程, 返回值是:%s' 
 % 
 (pid, a) 
 
    
 except 
 OSError, e: 
 
      
 print 
 '没有如此进程!!!' 

    
 
 if 
 __name__  
 = 
 = 
 '__main__' 
 : 
 
    
 kill( 
 8132 
 ) 

~~~~~~~~~~~~~~~~~~~~~~~~

        

python结束进程 怎么结束python进程_Python_03

       run_task_1 2 3,预计会更多,需要一个简单的办法kill掉某一个,或是这是全部kill掉,于是别写了下面的这个脚本

[python]  view plain  copy
#coding=utf-8  
import sys,os  
def kill_crawler(id):  
    cmd = 'ps -ef | grep python'  
    f = os.popen(cmd)  
    txt = f.readlines()  
    for line in txt:  
        colum = line.split()  
        pid = colum[1]  
    name = colum[-1]  
    if name.startswith('run_task_'):  
        task_id = name[9:-3]  
        if task_id == id or id =='0':  
        cmd = "kill -9 %d" % int(pid)  
        rc = os.system(cmd)  
        if rc == 0 :   
                    print "stop \"%s\" success!!" % name  
                else:  
                    print "stop \"%s\" failed!!" % name  
  
if __name__ =='__main__':  
     
    if not  len(sys.argv)==2:  
    print u'输入要结束的任务编号,0代表停止所有'  
        sys.exit()  
    id = sys.argv[1]  
    kill_crawler(id) 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

4. Windows下Kill进程

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

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

taskkill   /pid   程序的PID号码

可以直接在CMD窗口下试下这个命令....

可以先打开一个计算器程序,然后使用tasklist查看该程序的pid,这里是620,所以对应的Python代码是:


1 import os
2 if __name__ == "__main__":
3     pid = 620
4     os.popen('taskkill.exe /pid:'+str(pid))

 

ok,