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动态性强类型用法实例
May 09 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
Sep 03 Python
使用pip发布Python程序的方法步骤
Oct 11 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
Oct 16 Python
Python实现Linux监控的方法
May 16 Python
详解python编译器和解释器的区别
Jun 24 Python
python实现修改固定模式的字符串内容操作示例
Dec 30 Python
通过实例解析Python RPC实现原理及方法
Jul 07 Python
如何基于python实现年会抽奖工具
Oct 20 Python
教你怎么用python实现字符串转日期
May 24 Python
python unittest单元测试的步骤分析
Aug 02 Python
Golang Web 框架Iris安装部署
Aug 14 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模板技术[转]
2007/01/04 PHP
PHP生成Flash动画的实现代码
2010/03/12 PHP
PHP中的魔术方法总结和使用实例
2015/05/11 PHP
PHP程序中使用adodb连接不同数据库的代码实例
2015/12/19 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
PHP实现一个简单url路由功能实例
2016/11/05 PHP
php socket通信简单实现
2016/11/18 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
js关闭当前页面(窗口)的几种方式总结
2013/03/05 Javascript
js判断undefined变量类型使用typeof
2013/06/03 Javascript
Node.js异步I/O学习笔记
2014/11/04 Javascript
JS实现双击编辑可修改状态的方法
2015/08/14 Javascript
BootStrap和jQuery相结合实现可编辑表格
2016/04/21 Javascript
PhotoSwipe异步动态加载图片方法
2016/08/25 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
2016/12/19 Javascript
BootStrapTable 单选及取值的实现方法
2017/01/10 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
2017/01/11 Javascript
详解webpack3编译兼容IE8的正确姿势
2017/12/21 Javascript
element ui 表格动态列显示空白bug 修复方法
2018/09/04 Javascript
js实现简单扫雷
2020/11/27 Javascript
[47:48]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第三局
2016/02/28 DOTA
Python调用ctypes使用C函数printf的方法
2017/08/23 Python
Python基于回溯法子集树模板解决选排问题示例
2017/09/07 Python
python3.x上post发送json数据
2018/03/04 Python
Python实现两个list求交集,并集,差集的方法示例
2018/08/02 Python
django利用request id便于定位及给日志加上request_id
2018/08/26 Python
python实现单链表中删除倒数第K个节点的方法
2018/09/28 Python
对python中词典的values值的修改或新增KEY详解
2019/01/20 Python
从列表或字典创建Pandas的DataFrame对象的方法
2019/07/06 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
python自动生成证件号的方法示例
2021/01/14 Python
幼儿园五一活动方案
2014/02/07 职场文书
餐厅采购员岗位职责
2014/03/06 职场文书
质检员工作总结2015
2015/04/25 职场文书
感谢信
2019/04/11 职场文书
基于PostgreSQL/openGauss 的分布式数据库解决方案
2021/12/06 PostgreSQL