如何终止正在运行的iPython进程
我在用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
。(你可以随时用fg
或kill
来处理它,或者用disown
,还有其他各种方法——具体可以参考链接中的指南。)