如何终止正在运行的iPython进程

3 投票
2 回答
18855 浏览
提问于 2025-04-18 17:19

我在用iPython控制一些连接到我Mac上的设备。大部分时间它运行得很好,但有时候我给设备发了错误的指令,iPython就一直卡在那里,因为它在等回复,但设备根本不会回应,所以我需要一种方法来结束iPython的进程。按ctrl+c没有任何反应,只是在屏幕上显示了^C。按ctrl+z可以让我退出iPython,但似乎并没有真正结束它,因为当我重新启动iPython时,无法重新建立与设备的连接。最后我不得不重启电脑,才能让它们再次沟通。

2 个回答

0

在终端里,可以用“top”这个命令来查找进程的ID。你会看到一个叫做PID的列,下面的COMMAND列里会显示IPython或者类似的东西。然后你可以运行 kill -9 PID 来结束这个进程。

7

按下 ctrl+z 可以让我退出 iPython,但似乎并没有彻底关闭它,因为当我重新启动 iPython 时,无法重新连接到设备。最后我不得不重启电脑才能让它们再次沟通。

假设你在使用 bash(OS X 的默认命令行工具),按下 ^Z 会把程序放到后台暂停,你可以用作业控制来结束它:

$ ipython
Python 2.7.5 (default, Mar  9 2014, 22:15:05)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
IPython 2.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]:
[2]+  Stopped                 ipython
$ kill %2

[2]+  Stopped                 ipython
$

[2]+  Terminated: 15          ipython
$

这里有几点需要注意:

  • 通常后台程序会是作业 1,但你不能完全依赖这个。看一下 [2]+ Stopped; 这告诉你它是作业 2,所以你需要用 kill %2,而不是 kill %1
    • (我故意在后台放了另一个作业,以便让它变成 2,这是为了演示。)
    • 如果你不确定要结束哪个作业,可以用 jobs 命令列出所有作业。
    • 或者你可以用 %ipython,它指的是第一个名字以 ipython 开头的作业。
    • 或者用 %%,这表示“当前”作业——如果你自从按下 ^Z 后没有做其他事情,那就是 ipython,但如果你做了很多其他事情,不确定是否影响了作业控制,就要小心了。
  • 虽然 kill %2 会立即结束任务,但 bash 可能要等到下一个提示符才会识别到;注意我需要多按一次 return 才看到 Terminated 的消息。
    • 在某些情况下,你需要使用 wait 命令。
  • 如果 IPython 卡得很厉害,无法正常响应信号,可以用 kill -9 %2
  • 如果你不小心按了 ^Z,不想结束这个作业,可以用 fg %2 来返回到 IPython
  • 如果你想让 IPython 在后台运行,同时做其他事情,可以用 bg %2,而不是 kill %2。(你可以随时用 fgkill 来处理它,或者用 disown,还有其他各种方法——具体可以参考链接中的指南。)

撰写回答