停止所有并行运行程序的快捷键是什么?

1 投票
3 回答
1432 浏览
提问于 2025-04-18 18:12

我在Linux上用以下命令同时运行两个Python脚本

python program01.py & python program02.py

当我使用像'ctrl+c'这样的快捷键来停止它们时,只有最后一个运行的程序(比如这里的'program02.py')会被关闭,另一个程序仍然在运行。

我想知道怎么才能通过一个键盘命令同时关闭所有程序,因为有时候我需要它们都在运行,而只能用键盘命令来操作。

3 个回答

0

这是一个示例代码,用来启动一个虚拟线程。当这个虚拟线程检测到任何键盘输入时,它会跳出任何循环。我发现这种方法在控制+C无效时,可以可靠地停止程序,不过我相信还有更好的解决办法。

import thread
def input_thread(L):
    raw_input()
    L.append(None)
dummykeypress = []
thread.start_new_thread(input_thread, (dummykeypress,))
while True:
    if dummykeypress: break  # or exit() to kill entire program, etc
1

没有什么快捷方式可以直接做到这一点,但你可以通过一些设置来实现:

trap 'kill -INT $(jobs -p) &> /dev/null' INT

在你的 .bashrc 文件里加上这个设置后,按 Ctrl+C 在命令行上会中断所有的后台任务。

这意味着你可以先按 Ctrl+C 来结束前台进程,然后再按一次 Ctrl+C 来结束任何后台进程。

另外,

bind '"\C-b": "\nkill $(jobs -p)\n"'

这个设置可以让你按 Ctrl+B 来结束所有后台任务,这样在你急着按 Ctrl+C 结束前台进程时,就不会不小心结束后台任务了。

2

当你在程序后面加上&时,这个程序会在后台运行。要结束所有后台的任务,可以使用jobs -p | xargs kill -9这个命令。不过,bash没有快捷方式可以做到这一点。

在这种情况下,你可能想要这样运行你的命令:

python program01.py & python program02.py &

撰写回答