当Ctrl-C无效时,如何终止由vim创建的shell

3
我在vim中编写一些python多线程代码。当我运行测试时,使用:! py.test test_me.py命令,有时会出现挂起的情况,无法通过ctrl-C结束。因此,我必须将vim(实际上是运行测试的shell)放在后台,然后使用pkill py.test命令结束进程。有没有更好的方法来终止挂起的测试套件?
我尝试过映射:map ,k:! pkill py.test,但由于在测试运行期间我的输入被发送到运行测试的shell而不是vim,因此这种方式并不管用。
编辑:我正在寻找一种比ctrl-Zpkill py.testfg<cr>更快的终止测试进程的方法,最好是只需要按一个热键即可。

你尝试过使用PID吗? - Leb
我希望能够在不将vim放到后台的情况下终止我的挂起测试。如果我将vim放到后台,我可以使用“kill 1234”来终止测试。 - cowlicks
1个回答

1
当你在Vim中输入:!时,实际上是将Vim放到后台运行,此时运行的进程是py.test,获取了焦点。这意味着你不能告诉Vim为你杀死该进程,因为它无法接收到你的按键。
在运行py.test时,按下Ctrl-Z会将Vim放到后台,因为Vim是py.test的父进程。因此,shell会遍历整个进程链,将所有子进程以及父进程都放到后台。
我建议你打开另一个终端窗口,在那里完成所有的后勤工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接