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读取图片属性信息的实现方法
Sep 11 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
Apr 23 Python
Python3.5模块的定义、导入、优化操作图文详解
Apr 27 Python
Python 3.6 -win64环境安装PIL模块的教程
Jun 20 Python
python multiprocessing多进程变量共享与加锁的实现
Oct 02 Python
python 比较2张图片的相似度的方法示例
Dec 18 Python
Python如何向SQLServer存储二进制图片
Jun 08 Python
Python项目跨域问题解决方案
Jun 22 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
Jun 27 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
Jul 13 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
Sep 01 Python
使用python求解迷宫问题的三种实现方法
Mar 17 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
关于拼配咖啡,你要知道
2021/03/03 咖啡文化
destoon设置自定义搜索的方法
2014/06/21 PHP
yii2 页面底部加载css和js的技巧
2016/04/21 PHP
php输出含有“#”字符串的方法
2017/01/18 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
2018/11/30 PHP
JavaScript调用Activex控件的事件的实现方法
2010/04/11 Javascript
原生javascript兼容性测试实例
2013/07/01 Javascript
判断字符串的长度(优化版)中文占两个字符
2014/10/30 Javascript
js跨域问题浅析及解决方法优缺点对比
2014/11/08 Javascript
nodejs中实现sleep功能实例
2015/03/24 NodeJs
动态加载js、css的实例代码
2016/05/26 Javascript
浅谈addEventListener和attachEvent的区别
2016/07/14 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
js实现数组去重方法及效率?Ρ? target=
2017/02/14 Javascript
bootstrap treeview 树形菜单带复选框及级联选择功能
2018/06/08 Javascript
浅谈vue中$event理解和框架中在包含默认值外传参
2020/08/07 Javascript
[42:52]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
如何运行Python程序的方法
2013/04/21 Python
python 字典(dict)遍历的四种方法性能测试报告
2014/06/25 Python
星球大战与Python之间的那些事
2016/01/07 Python
浅析Python中元祖、列表和字典的区别
2016/08/17 Python
Python中关键字nonlocal和global的声明与解析
2017/03/12 Python
python把数组中的数字每行打印3个并保存在文档中的方法
2018/07/17 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
2019/05/15 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
2019/07/15 Python
python 元组和列表的区别
2020/12/30 Python
海外淘书首选:AbeBooks
2017/07/31 全球购物
慕尼黑山地运动、户外服装和体育用品专家:Sporthaus Schuster
2019/08/27 全球购物
行政经理岗位职责
2013/11/09 职场文书
统计岗位职责
2014/02/21 职场文书
销售行政专员岗位职责
2014/06/10 职场文书
2014年党建工作汇报材料
2014/10/27 职场文书
2015年幼儿园元旦亲子活动方案
2014/12/09 职场文书
赡养老人协议书范本
2015/08/06 职场文书
如何写好开幕词?
2019/06/24 职场文书
Ruby使用Mysql2连接操作MySQL
2022/04/19 Ruby