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

LWZ*_*LWZ 2 python io macos ipython

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

aba*_*ert 5

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

假设您正在使用bash(OS X的默认shell),^ 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
$
Run Code Online (Sandbox Code Playgroud)

有几件事需要注意:

  • 通常,后台程序将是作业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它或其他各种事情 - 请参阅链接指南.)