如何杀死正在运行的iPython进程

时间:2014-08-14 18:26:32

标签: python macos io ipython

我正在使用iPython来控制连接到Mac的其他设备。大部分时间它运行正常,但有时我给设备发出了错误的命令,iPython只是永远挂起,因为它正在等待响应但不会得到一个,所以我需要一种方法来杀死iPython进程。 ctrl+c没有做任何事情,只是在屏幕上打印一个^C字符串。 ctrl+z可以让我退出iPython,但它似乎没有杀死它,因为当我重新启动iPython时,我无法重新建立与设备的通信。最终我不得不重新启动计算机让两个人再次交谈。

2 个答案:

答案 0 :(得分:5)

  

ctrl + z可以让我退出iPython,但它似乎没有杀死它,因为当我重启iPython时,我无法重新建立与设备的通信。最终我不得不重新启动计算机让两人再次交谈。

假设您正在使用bash(OS X的默认shell),^ Z将其转换为暂停的后台作业,您可以使用job control将其删除:

$ 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代替kill %2重新使用IPython
  • 如果您想在执行其他操作时让IPython在后​​台运行,请使用bg %2代替kill %2。 (您以后可以随时fgkill(或disown或其他各种事项 - 请参阅相关指南。)

答案 1 :(得分:0)

在终端中使用“top”命令查找进程ID。它是PID列,在COMMAND列下,您将看到IPython或类似的东西。 他们运行kill -9 PID