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随机生成信用卡卡号的实现方法
May 14 Python
python函数形参用法实例分析
Aug 04 Python
动态规划之矩阵连乘问题Python实现方法
Nov 27 Python
Python3学习urllib的使用方法示例
Nov 29 Python
Python并发编程协程(Coroutine)之Gevent详解
Dec 27 Python
Python3中bytes类型转换为str类型
Sep 27 Python
对python实现合并两个排序链表的方法详解
Jan 23 Python
python 判断文件还是文件夹的简单实例
Jun 10 Python
利用Python库Scapy解析pcap文件的方法
Jul 23 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
Sep 11 Python
Python Pandas list列表数据列拆分成多行的方法实现
Dec 14 Python
pytorch实现ResNet结构的实例代码
May 17 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
phpMyadmin 用户权限中英对照
2010/04/02 PHP
php学习之 循环结构实现代码
2011/06/09 PHP
php URL跳转代码 减少外链
2011/06/25 PHP
PHP中的reflection反射机制测试例子
2014/08/05 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
浅析php设计模式之数据对象映射模式
2016/03/03 PHP
tp5递归 无限级分类详解
2019/10/18 PHP
JavaScript 浏览器验证代码(来自discuz)
2010/07/17 Javascript
JQuery的Alert消息框插件使用介绍
2010/10/09 Javascript
JavaScript拖拽、碰撞、重力及弹性运动实例分析
2016/01/08 Javascript
JS继承之借用构造函数继承和组合继承
2016/09/07 Javascript
微信小程序 定义全局数据、函数复用、模版等详细介绍
2016/10/27 Javascript
javascript入门之window对象【新手必看】
2016/11/22 Javascript
JavaScript面向对象分层思维全面解析
2016/11/22 Javascript
jQuery+Ajax实现用户名重名实时检测
2017/06/01 jQuery
VUE使用vuex解决模块间传值问题的方法
2017/06/01 Javascript
在vue中使用css modules替代scroped的方法
2018/03/10 Javascript
微信小程序自定义tabbar custom-tab-bar 6s出不来解决方案(cover-view不兼容)
2019/11/01 Javascript
JavaScript数组去重实现方法小结
2020/01/17 Javascript
[01:09:23]KG vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python中如何优雅的合并两个字典(dict)方法示例
2017/08/09 Python
python实现csv格式文件转为asc格式文件的方法
2018/03/23 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
基于python实现简单C/S模式代码实例
2020/09/14 Python
sklearn中的交叉验证的实现(Cross-Validation)
2021/02/22 Python
一个不错的HTML5 Canvas多层点击事件监听实例
2014/04/29 HTML / CSS
医学护理毕业生自荐信
2013/11/07 职场文书
军校本科大学生自我评价
2014/01/14 职场文书
销售会计岗位职责
2014/03/15 职场文书
工作调动申请报告
2015/05/18 职场文书
六一儿童节园长致辞
2015/07/31 职场文书
基于Python的EasyGUI学习实践
2021/05/07 Python
java多态注意项小结
2021/10/16 Java/Android
「租借女友」第2季樱泽墨角色PV&新视觉图公开
2022/03/21 日漫
python前后端自定义分页器
2022/04/13 Python
python解析json数据
2022/04/29 Python