如果您的程序在交互式控制台上运行,按 CTRL + C 将在主线程上引发 KeyboardInterrupt 异常。
如果您的 Python 程序没有捕获它,KeyboardInterrupt 将导致 Python 退出。但是,except KeyboardInterrupt: 块或类似裸露的except: 将阻止此机制实际停止脚本运行。
有时如果KeyboardInterrupt 不起作用,您可以发送SIGBREAK 信号代替;在 Windows 上,CTRL + Pause/Break 可以由解释器处理,而不会生成可捕获的 KeyboardInterrupt 异常。
但是,这些机制主要仅在 Python 解释器正在运行并响应操作系统事件时才有效。如果 Python 解释器由于某种原因没有响应,最有效的方法是终止运行解释器的整个操作系统进程。其机制因操作系统而异。
在 Unix 风格的 shell 环境中,您可以按 CTRL + Z 来 suspend 当前控制控制台的任何进程。一旦返回 shell 提示符,您可以使用 jobs 列出暂停的作业,您可以使用 kill %1 终止第一个暂停的作业。 (如果您想重新开始运行,您可以使用fg %1 在前台继续该作业;请阅读您的shell 的作业控制手册了解更多信息。)
或者,在 Unix 或类 Unix 环境中,您可以找到 Python 进程的 PID(进程标识符)并通过 PID 将其杀死。使用ps aux | grep python 之类的东西来查找正在运行的Python 进程,然后使用kill <pid> 发送SIGTERM 信号。
Unix 上的kill 命令默认发送SIGTERM,Python 程序可以使用signal 模块为SIGTERM 安装信号处理程序。理论上,SIGTERM 的任何信号处理程序都应该优雅地关闭进程。但有时如果进程卡住了(例如,阻塞在不可中断的 IO 睡眠状态),SIGTERM 信号将不起作用,因为进程甚至无法唤醒处理它。
要强制终止没有响应信号的进程,您需要发送SIGKILL 信号,有时称为kill -9,因为9 是SIGKILL 常量的数值。在命令行中,您可以使用kill -KILL <pid>(或简称kill -9 <pid>)发送SIGKILL,并立即停止进程运行。
在 Windows 上,您没有 Unix 系统的进程信号,但您可以使用 TerminateProcess 函数强制终止正在运行的进程。交互方式,最简单的方法是打开任务管理器,找到与您的程序对应的python.exe 进程,然后单击“结束进程”按钮。您也可以将taskkill 命令用于类似目的。