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三级目录展示的实现方法
Sep 28 Python
python3调用R的示例代码
Feb 23 Python
Gauss-Seidel迭代算法的Python实现详解
Jun 29 Python
python实现静态服务器
Sep 05 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
Oct 17 Python
利用python实现PSO算法优化二元函数
Nov 13 Python
python实现用类读取文件数据并计算矩形面积
Jan 18 Python
Python中断多重循环的几种方式详解
Feb 10 Python
Python读取xlsx数据生成图标代码实例
Aug 12 Python
Django实现简单的分页功能
Feb 22 Python
python解决12306登录验证码的实现
Apr 18 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
thinkphp3.2.2实现生成多张缩略图的方法
2014/12/19 PHP
PHP框架Laravel中使用UUID实现数据分表操作示例
2018/05/30 PHP
微信公众平台开发教程⑥ 微信开发集成类的使用图文详解
2019/04/10 PHP
ASP.NET jQuery 实例15 通过控件CustomValidator验证CheckBoxList
2012/02/03 Javascript
javascript:;与javascript:void(0)使用介绍
2013/06/05 Javascript
JS.GetAllChild(element,deep,condition)使用介绍
2013/09/21 Javascript
jquery实现的V字形显示效果代码
2015/10/27 Javascript
javascript面向对象程序设计高级特性经典教程(值得收藏)
2016/05/19 Javascript
AngularJS的ng Http Request与response格式转换方法
2016/11/07 Javascript
原生js实现选项卡功能
2017/03/08 Javascript
基于jquery实现多级菜单效果
2017/07/25 jQuery
使用Vuex解决Vue中的身份验证问题
2018/09/28 Javascript
vue页面切换项目实现转场动画的方法
2019/11/12 Javascript
JavaScript实现多层颜色选项卡嵌套
2020/09/21 Javascript
[52:52]完美世界DOTA2联赛PWL S3 LBZS vs access 第一场 12.10
2020/12/13 DOTA
Python使用multiprocessing创建进程的方法
2015/06/04 Python
python读写ini配置文件方法实例分析
2015/06/30 Python
Python 常用string函数详解
2016/05/30 Python
Python实现感知机(PLA)算法
2017/12/20 Python
python 在屏幕上逐字显示一行字的实例
2018/12/24 Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
2019/08/06 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
2021/01/12 Python
HTML5混合开发二维码扫描以及调用本地摄像头
2017/12/27 HTML / CSS
购买英国原创艺术:Art Gallery
2018/08/25 全球购物
保时捷设计:Porsche Design
2019/03/30 全球购物
哈理工毕业生的求职信
2013/12/22 职场文书
八年级历史教学反思
2014/01/10 职场文书
化学系大学生自荐信范文
2014/03/01 职场文书
个人三严三实对照检查材料思想汇报
2014/09/22 职场文书
民主评议党员总结
2014/10/20 职场文书
聘任证明怎么写
2015/03/02 职场文书
应急管理工作总结2015
2015/05/04 职场文书
2015年银行个人工作总结
2015/05/14 职场文书
vue.js Router中嵌套路由的实用示例
2021/06/27 Vue.js
angular4实现带搜索的下拉框
2022/03/25 Javascript
Java 超详细讲解设计模式之中的抽象工厂模式
2022/03/25 Java/Android