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 10 Python
Python实现数据库编程方法详解
Jun 09 Python
python使用电子邮件模块smtplib的方法
Aug 28 Python
python编程实现12306的一个小爬虫实例
Dec 27 Python
python验证码识别教程之利用投影法、连通域法分割图片
Jun 04 Python
10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)
Oct 11 Python
解决Python pandas plot输出图形中显示中文乱码问题
Dec 12 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
Nov 08 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
Jan 13 Python
获取python运行输出的数据并解析存为dataFrame实例
Jul 07 Python
vue.js刷新当前页面的实例讲解
Dec 29 Python
Python中的 Set 与 dict
Mar 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
Yii+MYSQL锁表防止并发情况下重复数据的方法
2016/07/14 PHP
php web环境和命令行环境下查找php.ini的位置
2019/07/17 PHP
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
javascript 单例/单体模式(Singleton)
2011/04/07 Javascript
chrome下jq width()方法取值为0的解决方法
2014/05/26 Javascript
javascript学习笔记(八)正则表达式
2014/10/08 Javascript
jQuery的text()方法用法分析
2014/12/20 Javascript
JavaScript中字符串分割函数split用法实例
2015/04/07 Javascript
JavaScript实现快速排序的方法
2015/07/31 Javascript
12种JavaScript常用的MVC框架比较分析
2015/11/16 Javascript
第二章之Bootstrap 页面排版样式
2016/04/25 Javascript
Bootstrap基本样式学习笔记之图片(6)
2016/12/07 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
2017/12/11 Javascript
vue安装和使用scss及sass与scss的区别详解
2018/10/15 Javascript
typescript nodejs 依赖注入实现方法代码详解
2019/07/21 NodeJs
vue props对象validator自定义函数实例
2019/11/13 Javascript
vue中上传视频或图片或图片和文字一起到后端的解决方法
2019/12/01 Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
2020/03/16 Javascript
js实现翻牌小游戏
2020/07/31 Javascript
[59:48]LGD vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
寻找网站后台地址的python脚本
2014/09/01 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
2017/06/02 Python
python编程实现12306的一个小爬虫实例
2017/12/27 Python
pytorch对梯度进行可视化进行梯度检查教程
2020/02/04 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
Python字符串split及rsplit方法原理详解
2020/06/29 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
2020/08/04 Python
使用canvas生成含有微信头像的邀请海报没有微信头像问题
2019/10/29 HTML / CSS
英智兴达软件测试笔试题
2016/10/12 面试题
医药大学生求职简历的自我评价
2013/10/17 职场文书
2014年售票员工作总结
2014/11/19 职场文书
Python实现老照片修复之上色小技巧
2021/10/16 Python
Innodb存储引擎中的后台线程详解
2022/04/03 MySQL
Python matplotlib绘制雷达图
2022/04/13 Python
Django框架模板用法详解
2022/06/10 Python
MyBatis XPathParser解析器使用范例详解
2022/07/15 Java/Android