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 相关文章推荐
kNN算法python实现和简单数字识别的方法
Nov 18 Python
Python实现的Google IP 可用性检测脚本
Apr 23 Python
python获取外网IP并发邮件的实现方法
Oct 01 Python
python取代netcat过程分析
Feb 10 Python
Python 创建空的list,以及append用法讲解
May 04 Python
在python 中split()使用多符号分割的例子
Jul 15 Python
如何用python处理excel表格
Jun 09 Python
Python实现一个简单的递归下降分析器
Aug 01 Python
django前端页面下拉选择框默认值设置方式
Aug 09 Python
Python2与Python3关于字符串编码处理的差别总结
Sep 07 Python
python用tkinter实现一个简易能进行随机点名的界面
Sep 27 Python
浅谈Python3中datetime不同时区转换介绍与踩坑
Aug 02 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
农民和部队如何穿矿
2020/03/04 星际争霸
php实现监听事件
2013/11/06 PHP
php获取apk包信息的方法
2014/08/15 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
2015/04/17 PHP
PHP基于socket实现客户端和服务端通讯功能
2017/07/13 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
VBS通过WMI监视注册表变动的代码
2011/10/27 Javascript
JQuery入门——移除绑定事件unbind方法概述及应用
2013/02/05 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
浅谈javascript中字符串String与数组Array
2014/12/31 Javascript
js获取html的span标签的值方法(超简单)
2016/07/26 Javascript
ajax的分页查询示例(不刷新页面)
2017/01/11 Javascript
js数字滑动时钟的简单实现(示例讲解)
2017/08/14 Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
2019/01/15 Javascript
微信小程序跨页面数据传递事件响应实现过程解析
2019/12/19 Javascript
Js on及addEventListener原理用法区别解析
2020/07/11 Javascript
javascript canvas时钟模拟器
2020/07/13 Javascript
python实现忽略大小写对字符串列表排序的方法
2014/09/25 Python
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
在Python中使用HTMLParser解析HTML的教程
2015/04/29 Python
Python多线程经典问题之乘客做公交车算法实例
2017/03/22 Python
python读取word文档,插入mysql数据库的示例代码
2018/11/07 Python
Python自动发送邮件的方法实例总结
2018/12/08 Python
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
python matplotlib 绘图 和 dpi对应关系详解
2020/03/14 Python
如果NULL和0作为空指针常数是等价的,那我到底该用哪一个
2014/09/16 面试题
介绍一下Python中webbrowser的用法
2013/05/07 面试题
电信专业毕业生推荐信
2013/11/18 职场文书
金属材料工程个人求职的自我评价
2013/12/04 职场文书
执行总经理岗位职责
2014/02/03 职场文书
《只有一个地球》教学反思
2014/02/14 职场文书
公司节能减排倡议书
2014/05/14 职场文书
最美护士演讲稿
2014/08/27 职场文书
养成教育主题班会
2015/08/13 职场文书
python实现ROA算子边缘检测算法
2021/04/05 Python
游戏《我的世界》澄清Xbox版暂无计划加入光追
2022/04/03 其他游戏