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实时获取cmd的输出
Dec 13 Python
深入理解NumPy简明教程---数组1
Dec 17 Python
python获取指定时间差的时间实例详解
Apr 11 Python
python 读取文件并替换字段的实例
Jul 12 Python
Python实现打砖块小游戏代码实例
May 18 Python
numpy.linspace函数具体使用详解
May 27 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
Aug 02 Python
python 有效的括号的实现代码示例
Nov 11 Python
使用Python实现正态分布、正态分布采样
Nov 20 Python
在pytorch中对非叶节点的变量计算梯度实例
Jan 10 Python
Python进程间通信multiprocess代码实例
Mar 18 Python
Python3压缩和解压缩实现代码
Mar 01 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表单提交问题的解决方法
2011/04/12 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
2014/03/12 PHP
PHP 正则表达式常用函数
2014/08/17 PHP
PHP封装的字符串加密解密函数
2015/12/18 PHP
PHP链表操作简单示例
2016/10/15 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
yii框架使用分页的方法分析
2019/07/25 PHP
use jscript with List Proxy Server Information
2007/06/11 Javascript
javascript学习笔记(十八) 获得页面中的元素代码
2012/06/20 Javascript
浅析js中2个等号与3个等号的区别
2013/08/06 Javascript
JS+CSS实现TreeMenu二级树形菜单完整实例
2015/09/18 Javascript
Boostrap模态窗口的学习小结
2016/03/28 Javascript
Angularjs 实现分页功能及示例代码
2016/09/14 Javascript
vue实现图片加载完成前的loading组件方法
2018/02/05 Javascript
Vue.js做select下拉列表的实例(ul-li标签仿select标签)
2018/03/02 Javascript
Vue插值、表达式、分隔符、指令知识小结
2018/10/12 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
vue-cli3配置与跨域处理方法
2019/08/17 Javascript
使用kbone解决Vue项目同时支持小程序问题
2019/11/08 Javascript
node事件循环和process模块实例分析
2020/02/14 Javascript
vue elementui tree 任意级别拖拽功能代码
2020/08/31 Javascript
[45:18]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第一场
2018/04/04 DOTA
[01:17]炒鸡美酒第四天TA暴走
2018/06/05 DOTA
python多进程中的内存复制(实例讲解)
2018/01/05 Python
解决Python下imread,imwrite不支持中文的问题
2018/12/05 Python
Python Celery多队列配置代码实例
2019/11/22 Python
基于python 凸包问题的解决
2020/04/16 Python
Python-openpyxl表格读取写入的案例详解
2020/11/02 Python
pycharm最新激活码有效期至2100年(亲测可用)
2021/02/05 Python
屈臣氏乌克兰:Watsons UA
2019/10/29 全球购物
入党自荐书范文
2015/03/05 职场文书
幼儿园开学通知
2015/04/24 职场文书
傲慢与偏见电影观后感
2015/06/10 职场文书
详解用Python把PDF转为Word方法总结
2021/04/27 Python
PHP使用QR Code生成二维码实例
2021/07/07 PHP
AJAX实现指定部分页面刷新效果
2021/10/16 Javascript