Python中终止程序的几种常用方法详解
本文详细解析Python中主动结束程序的四种主要方式:sys.exit()、os._exit()、os.kill()以及Windows下的taskkill命令。重点对比了各方法的适用平台、异常处理机制及参数含义,并提供了Linux和Windows环境下的具体代码示例与进程ID获取方法,帮助开发者根据实际需求选择最合适的进程终止方案。
Python程序终止方法概述
在Python开发中,主动结束当前程序或终止特定进程是常见需求。Python标准库提供了多种实现方式,它们在不同场景下的行为、平台兼容性及异常处理机制存在显著差异。本文对这些方法进行了梳理与实测,旨在为开发者提供清晰的实践参考。
本文内容参考了以下资料:
《Python核心编程》(第二版)
知乎相关讨论:http://www.zhihu.com/question/21187839
sys.exit():标准退出方式
1. sys.exit() 方法
调用该语句会立即终止Python解释器的运行,这是最常用且推荐的做法。其优势在于跨平台兼容性好,不依赖操作系统底层实现,因此通常是退出Python脚本的首选方案。
sys.exit() 接受一个可选参数 status,默认值为 0,表示程序正常退出;若传入非零值(如 1),则标识为异常退出。
import sys
sys.exit()
sys.exit(0)
sys.exit(1)
该方法在内部引发 SystemExit 异常。这是Python中唯一不被视为错误的异常类型。如果未通过 try-except 块捕获该异常,程序将直接退出;若捕获了该异常,则可以执行额外的清理操作或自定义退出逻辑。
os._exit():底层直接退出
2. os._exit() 方法
此方法同样用于直接终止程序,且不会抛出异常。需要注意的是,其行为可能受操作系统平台限制。不过,在主流的 Win32 和基于 UNIX 的系统(如 Linux)上,其表现通常符合预期,无明显差异。
有观点认为该方法底层调用了 C 语言的 _exit() 函数,但具体实现细节未经过严格考证。
os.kill():UNIX平台信号终止
3. os.kill() 方法
该方法主要用于直接强制终止进程,但其有效性仅限于 UNIX 类平台,在 Windows 上不可用。
其工作原理是模拟 UNIX 系统中的信号发送机制,需要两个参数:第一个参数是目标进程的 PID(进程标识符),第二个参数是要发送的操作信号。
第二个参数(信号类型)常用的取值包括:
SIGINT:终止进程,通常用于响应中断信号(如 Ctrl+C)。
SIGTERM:终止进程,发送软件终止信号,允许进程进行清理工作。
SIGKILL:终止进程,强制杀死进程,无法被捕获或忽略。
SIGALRM:闹钟信号,用于超时处理。
示例场景:
在 Linux 平台上启动 VLC 视频播放器后,通过进程查看工具发现其进程号为 4497。

接着执行 os.kill 操作来终止该进程。

执行完毕后,VLC 播放器窗口关闭,对应的进程也被成功终止。
以下是使用 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,预计后续会有更多任务。为了能够简单地终止某一个特定任务,或者一次性全部终止,编写了以下脚本。
#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)
Windows平台进程终止方案
4. Windows 下的进程终止方法
既然在 Linux 环境下可以通过信号机制终止进程,那么在 Windows 环境下也有相应的处理手段。
这里利用 os.popen() 方法直接执行系统命令。在 Windows 系统中,这通常对应使用 taskkill 命令来终止进程。其基本语法形式如下:
taskkill /pid <程序的PID号码>
用户可以直接在 CMD 命令行窗口中测试该命令的有效性。
操作步骤如下:先打开计算器程序,使用 tasklist 命令查看该程序的 PID,假设获取到的 PID 为 620。对应的 Python 代码如下:
import os
if __name__ == "__main__":
pid = 620
os.popen('taskkill.exe /pid:'+str(pid))
以上内容涵盖了Python中几种主要的程序终止方式,希望对各位的学习和工作有所帮助。欢迎大家继续支持本站获取更多技术分享。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









