用于停止所有程序的键盘快捷键,并行运行?

时间:2014-08-22 16:44:53

标签: python linux shell parallel-processing

我使用以下命令在linux上并行运行两个python脚本

python program01.py & python program02.py

当我使用键盘快捷键时,例如&c; ctrl + c'为了阻止它们,它只关闭命令中最后一个程序(例如这里是' program02.py'),另一个保持打开/运行。

我需要知道如何使用键盘命令一次关闭所有这些命令,因为当只有键盘命令可以使用时,我需要所有这些命令继续运行。

3 个答案:

答案 0 :(得分:2)

当您在结束时使用&运行程序时,它将在后台运行。要终止所有后台作业,请使用jobs -p | xargs kill -9命令。没有bash快捷方式。

在这种情况下,您可能希望将命令运行为:

python program01.py & python program02.py &

答案 1 :(得分: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 :(得分:0)

这是一个启动虚拟线程的示例代码,当虚拟线程检测到任何键盘输入时,它将突破任何循环。我发现这是一个可靠的方法来阻止程序,当control-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