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使用sorted函数对列表进行排序的方法
Apr 04 Python
Python冒泡排序注意要点实例详解
Sep 09 Python
解决python2.7用pip安装包时出现错误的问题
Jan 23 Python
Python创建xml文件示例
Mar 22 Python
Python使用装饰器进行django开发实例代码
Feb 06 Python
Python爬豆瓣电影实例
Feb 23 Python
浅谈python的深浅拷贝以及fromkeys的用法
Mar 08 Python
Python+Selenium使用Page Object实现页面自动化测试
Jul 14 Python
详解numpy.meshgrid()方法使用
Aug 01 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
Dec 05 Python
使用 Python ssh 远程登陆服务器的最佳方案
Mar 06 Python
浅谈python出错时traceback的解读
Jul 15 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 cc攻击代码与防范方法
2012/10/18 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
2016/07/07 PHP
PHP中overload与override的区别
2017/02/13 PHP
PHP封装的简单连接MongoDB类示例
2019/02/13 PHP
Javascript的IE和Firefox兼容性汇编
2006/07/01 Javascript
JavaScript 特殊字符
2007/04/05 Javascript
js 判断浏览器类型 去全角、半角空格 自动关闭当前窗口
2009/04/10 Javascript
JQuery中对服务器控件 DropdownList, RadioButtonList, CheckboxList的操作总结
2011/06/28 Javascript
javascript获取隐藏dom的宽高 具体实现
2013/07/14 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
jQuery实现Meizu魅族官方网站的导航菜单效果
2015/09/14 Javascript
轻松使用jQuery双向select控件Bootstrap Dual Listbox
2015/12/13 Javascript
js表单登陆验证示例
2016/10/19 Javascript
JS设置随机出现2个数字的实例代码
2017/07/19 Javascript
Vue中"This dependency was not found"问题的解决方法
2018/06/19 Javascript
小程序视频或音频自定义可拖拽进度条的示例代码
2018/09/30 Javascript
多个Vue项目部署到服务器的步骤记录
2020/10/22 Javascript
[01:25:09]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第二场
2014/05/24 DOTA
[00:56]跨越时空加入战场 全新祈求者身心“失落奇艺侍祭”展示
2019/07/20 DOTA
Python  __getattr__与__setattr__使用方法
2008/09/06 Python
python分析nignx访问日志脚本分享
2015/02/26 Python
Python全局变量操作详解
2015/04/14 Python
利用numpy+matplotlib绘图的基本操作教程
2017/05/03 Python
python调用Matplotlib绘制分布点并且添加标签
2018/05/31 Python
详解python之协程gevent模块
2018/06/14 Python
连接pandas以及数组转pandas的方法
2019/06/28 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
2019/07/17 Python
Django用户登录与注册系统的实现示例
2020/06/03 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
css3实现背景动态渐变效果
2019/12/10 HTML / CSS
高中生自我评语大全
2014/01/19 职场文书
校园十大歌手策划书
2014/02/01 职场文书
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书
护士岗位竞聘书
2015/09/15 职场文书
Python使用海龟绘图实现贪吃蛇游戏
2021/06/18 Python
java版 简单三子棋游戏
2022/05/04 Java/Android