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变量类型知识点总结
Feb 18 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
Apr 29 Python
OpenCV-Python 摄像头实时检测人脸代码实例
Apr 30 Python
Django时区详解
Jul 24 Python
Django项目中实现使用qq第三方登录功能
Aug 13 Python
python之列表推导式的用法
Nov 29 Python
Python 时间戳之获取整点凌晨时间戳的操作方法
Jan 28 Python
详解字符串在Python内部是如何省内存的
Feb 03 Python
pycharm无法导入本地模块的解决方式
Feb 12 Python
Python发送邮件实现基础解析
Aug 14 Python
python 邮件检测工具mmpi的使用
Jan 04 Python
pytorch 实现L2和L1正则化regularization的操作
Mar 03 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中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
php+mysql结合Ajax实现点赞功能完整实例
2015/01/30 PHP
php和redis实现秒杀活动的流程
2019/07/17 PHP
避免 showModalDialog 弹出新窗体的原因分析
2010/05/31 Javascript
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
给artDialog 5.02 增加ajax get功能详细介绍
2012/11/13 Javascript
js实现表格字段排序
2014/02/19 Javascript
javascript实现简单的贪吃蛇游戏
2015/03/31 Javascript
js获取元素的外链样式的简单实现方法
2016/06/06 Javascript
jQuery为DOM动态追加事件的方法
2017/02/16 Javascript
js鼠标移动时禁止选中文字
2017/02/19 Javascript
ES6字符串模板,剩余参数,默认参数功能与用法示例
2017/04/06 Javascript
ES6学习笔记之正则表达式和字符串正则方法分析
2017/04/25 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
2017/08/26 Javascript
JS实现的DOM插入节点操作示例
2018/04/04 Javascript
原生JS实现自定义下拉单选选择框功能
2018/10/12 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
VUE安装使用教程详解
2019/06/03 Javascript
在vue中利用全局路由钩子给url统一添加公共参数的例子
2019/11/01 Javascript
JavaScript使用canvas绘制随机验证码
2020/02/17 Javascript
jquery实现直播视频弹幕效果
2020/02/25 jQuery
搭建vscode+vue环境的详细教程
2020/08/31 Javascript
浅谈js数组splice删除某个元素爬坑
2020/10/14 Javascript
让Python代码更快运行的5种方法
2015/06/21 Python
Win8下python3.5.1安装教程
2020/07/29 Python
Python list与NumPy array 区分详解
2019/11/06 Python
Python 解析简单的XML数据
2020/07/24 Python
html5 canvas 实现光线沿不规则路径运动
2020/04/20 HTML / CSS
美国领先的眼镜和太阳镜在线零售商:Glasses.com
2019/08/26 全球购物
店长岗位的工作内容
2013/11/12 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
受伤赔偿协议书
2014/09/24 职场文书
党员进社区活动总结
2015/05/07 职场文书
nginx内存池源码解析
2021/11/20 Servers
mapstruct的用法之qualifiedByName示例详解
2022/04/06 Java/Android
搭建Yolov5服务器
2022/04/30 Servers