Python的几种主动结束程序方式


Posted in Python onNovember 22, 2019

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

参考:

Python 核心编程(第二版)

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

1. sys.exit()

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

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

import sys
sys.exit()
sys.exit(0)
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的几种主动结束程序方式

然后执行os.kill操作:

Python的几种主动结束程序方式

执行完之后可以发现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)

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

#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代码是:

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中对列表排序实例
Jan 04 Python
Python爬取读者并制作成PDF
Mar 10 Python
使用rpclib进行Python网络编程时的注释问题
May 06 Python
非递归的输出1-N的全排列实例(推荐)
Apr 11 Python
django Serializer序列化使用方法详解
Oct 16 Python
Django Sitemap 站点地图的实现方法
Apr 29 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
Jul 22 Python
python+openCV调用摄像头拍摄和处理图片的实现
Aug 06 Python
Python Django框架模板渲染功能示例
Nov 08 Python
Python获取二维数组的行列数的2种方法
Feb 11 Python
pycharm永久激活超详细教程
Oct 29 Python
tensorflow中的梯度求解及梯度裁剪操作
May 26 Python
python实现超市商品销售管理系统
Nov 22 #Python
python实现二分类的卡方分箱示例
Nov 22 #Python
python的等深分箱实例
Nov 22 #Python
基于python实现学生信息管理系统
Nov 22 #Python
基于python cut和qcut的用法及区别详解
Nov 22 #Python
python创建学生成绩管理系统
Nov 22 #Python
Python计算不规则图形面积算法实现解析
Nov 22 #Python
You might like
PHP防止表单重复提交的几种常用方法汇总
2014/08/19 PHP
PHP处理Oracle的CLOB实例
2014/11/03 PHP
php一行代码获取文件后缀名实例分析
2014/11/12 PHP
PHP静态成员变量和非静态成员变量详解
2017/02/14 PHP
php+js实现点赞功能的示例详解
2020/08/07 PHP
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
js中的布尔运算符使用介绍
2013/11/20 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
Jquery Easyui日历组件Calender使用详解(23)
2016/12/18 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
js获取元素的偏移量offset简单方法(必看)
2017/07/05 Javascript
jQuery plugin animsition使用小结
2017/09/14 jQuery
JS伪继承prototype实现方法示例
2018/06/20 Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
2018/09/05 Javascript
JavaScript读写二进制数据的方法详解
2018/09/09 Javascript
vue3.0中使用element的完整步骤
2021/03/04 Vue.js
用python实现的去除win下文本文件头部BOM的代码
2013/02/10 Python
python获得图片base64编码示例
2014/01/16 Python
Python中join和split用法实例
2015/04/14 Python
Python正则表达式匹配中文用法示例
2017/01/17 Python
python绘制立方体的方法
2018/07/02 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
2019/04/26 Python
Python二维码生成识别实例详解
2019/07/16 Python
Python列表的切片实例讲解
2019/08/20 Python
python装饰器使用实例详解
2019/12/14 Python
Python 音频生成器的实现示例
2019/12/24 Python
Python数据正态性检验实现过程
2020/04/18 Python
python中format函数如何使用
2020/06/22 Python
举例详解CSS3中的Transition
2015/07/15 HTML / CSS
什么是Oracle的后台进程background processes?都有哪些后台进程?
2012/04/26 面试题
CLR与IL分别是什么含义
2016/08/23 面试题
打造完美自荐信
2014/01/24 职场文书
小小的船教学反思
2014/02/21 职场文书
动画设计系毕业生求职信
2014/07/15 职场文书
给女朋友道歉的话大全
2015/01/20 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书