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 ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
Jun 10 Python
Python两个整数相除得到浮点数值的方法
Mar 18 Python
在Python的Flask框架下使用sqlalchemy库的简单教程
Apr 09 Python
python将文本转换成图片输出的方法
Apr 28 Python
Pycharm学习教程(1) 定制外观
May 02 Python
在python中画正态分布图像的实例
Jul 08 Python
Ubuntu+python将nii图像保存成png格式
Jul 18 Python
OpenCV模板匹配matchTemplate的实现
Oct 18 Python
Python多线程模块Threading用法示例小结
Nov 09 Python
Python hashlib模块实例使用详解
Dec 24 Python
python虚拟环境模块venv使用及示例
Mar 04 Python
Python学习之时间包使用教程详解
Mar 21 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三元运算符的结合性介绍
2012/01/10 PHP
php预定义变量使用帮助(带实例)
2013/10/30 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
PHP基于Closure类创建匿名函数的方法详解
2017/08/17 PHP
jquery.ui.draggable中文文档
2009/11/24 Javascript
javascript 获取url参数和script标签中获取url参数函数代码
2010/01/22 Javascript
JavaScript arguments 多参传值函数
2010/10/24 Javascript
window.location.href = window.location.href 跳转无反应 a超链接onclick事件写法
2013/08/21 Javascript
js简单实现删除记录时的提示效果
2013/12/05 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
javascript实现验证身份证号的有效性并提示
2015/04/30 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
2015/07/17 Javascript
Jquery全屏相册插件zoomvisualizer具有调节放大与缩小功能
2015/11/02 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(基于jquery)
2015/11/18 Javascript
js实现文本框输入文字个数限制代码
2015/12/25 Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
2016/08/11 Javascript
JS获取html元素的标记名实现方法
2016/10/08 Javascript
jQuery表单验证之密码确认
2017/05/22 jQuery
jQuery+C#实现参数RSA加密传输功能【附jsencrypt.js下载】
2017/06/26 jQuery
基于vue v-for 循环复选框-默认勾选第一个的实现方法
2018/03/03 Javascript
Vue项目添加动态浏览器头部title的方法
2018/07/11 Javascript
jquery3和layui冲突导致使用layui.layer.full弹出全屏iframe窗口时高度152px问题
2019/05/12 jQuery
Vue实现回到顶部和底部动画效果
2019/07/31 Javascript
详解element-ui中表单验证的三种方式
2019/09/18 Javascript
element-ui中dialog弹窗关闭按钮失效的解决
2020/09/22 Javascript
[45:59]完美世界DOTA2联赛PWL S2 FTD vs GXR 第二场 11.22
2020/11/24 DOTA
使用Python编写爬虫的基本模块及框架使用指南
2016/01/20 Python
python实现集中式的病毒扫描功能详解
2019/07/09 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
2019/08/08 Python
基于 Django 的手机管理系统实现过程详解
2019/08/16 Python
Python列表推导式实现代码实例
2020/09/09 Python
MAC彩妆英国官网:M·A·C UK
2018/05/30 全球购物
列车长先进事迹材料
2014/01/25 职场文书
我读书我快乐演讲稿
2014/05/07 职场文书
企业计划生育责任书
2015/05/09 职场文书
JDBC连接的六步实例代码(与mysql连接)
2021/05/12 MySQL