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对象引用、可变性和垃圾回收详解
Aug 21 Python
Python升级导致yum、pip报错的解决方法
Sep 06 Python
你真的了解Python的random模块吗?
Dec 12 Python
详解python 拆包可迭代数据如tuple, list
Dec 29 Python
基于Python列表解析(列表推导式)
Jun 23 Python
Pycharm运行加载文本出现错误的解决方法
Jun 27 Python
Python定时任务工具之APScheduler使用方式
Jul 24 Python
Python多叉树的构造及取出节点数据(treelib)的方法
Aug 09 Python
Django正则URL匹配实现流程解析
Nov 13 Python
python实现录制全屏和选择区域录屏功能
Feb 05 Python
python数据库批量插入数据的实现(executemany的使用)
Apr 30 Python
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
Jun 13 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个人网站架设连环讲(二)
2006/10/09 PHP
提高PHP编程效率的方法
2013/11/07 PHP
php堆排序实现原理与应用方法
2015/01/03 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
javascript动画效果类封装代码
2007/08/28 Javascript
Firefox outerHTML实现代码
2009/06/04 Javascript
JavaScript 组件之旅(四):测试 JavaScript 组件
2009/10/28 Javascript
javascript 解析url的search方法
2010/02/09 Javascript
js中 关于undefined和null的区别介绍
2013/04/16 Javascript
jquery表单验证框架提供的身份证验证方法(示例代码)
2013/12/27 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
每天一篇javascript学习小结(Function对象)
2015/11/16 Javascript
JavaScript获取当前运行脚本文件所在目录的方法
2016/02/03 Javascript
Node.js的文件权限及读写flag详解
2016/10/11 Javascript
jQuery插件ajaxFileUpload异步上传文件
2016/10/19 Javascript
Vue2.0实现1.0的搜索过滤器功能实例代码
2017/03/20 Javascript
js仿微信抢红包功能
2020/09/25 Javascript
React从react-router路由上做登陆验证控制的方法
2018/05/10 Javascript
详解在不使用ssr的情况下解决Vue单页面SEO问题
2018/11/08 Javascript
Vue v-text指令简单使用方法示例
2019/09/19 Javascript
JavaScript中的函数式编程详解
2020/08/22 Javascript
用 Python 连接 MySQL 的几种方式详解
2018/04/04 Python
python pygame模块编写飞机大战
2018/11/20 Python
python里运用私有属性和方法总结
2019/07/08 Python
利用python实现PSO算法优化二元函数
2019/11/13 Python
tensorflow指定CPU与GPU运算的方法实现
2020/04/21 Python
Python 列表推导式需要注意的地方
2020/10/23 Python
HTML5中判断横屏竖屏的方法(移动端)
2016/08/04 HTML / CSS
来自圣地亚哥的实惠太阳镜:Knockaround
2018/08/27 全球购物
美国最大的电子宠物训练产品制造商:PetSafe
2018/10/12 全球购物
鲜果饮品店创业计划书
2014/01/21 职场文书
六年级数学教学反思
2014/02/03 职场文书
老师对学生的寄语
2014/04/09 职场文书
销售队伍口号
2014/06/11 职场文书
区域销售大会开幕词
2016/03/04 职场文书
如何用python插入独创性声明
2021/03/31 Python