Bash 如何在ctrl+;C

Bash 如何在ctrl+;C,bash,Bash,我有两个python脚本,我从shell脚本集中开始,如下所示: #!/bin/bash python prog1.py & python prog2.py & python prog3.py 由于我正在开发,我经常想停止这些过程。我通常通过点击ctrl+C来实现,但不幸的是,有两个python程序保持(zeromq)套接字打开。这意味着我必须手动找到它们(我使用lsof-I),然后使用PID杀死它们 因此,我正在寻找一种更简单的方法,当我点击ctrl+C时,自动从shell

我有两个python脚本,我从shell脚本集中开始,如下所示:

#!/bin/bash
python prog1.py &
python prog2.py &
python prog3.py 
由于我正在开发,我经常想停止这些过程。我通常通过点击ctrl+C来实现,但不幸的是,有两个python程序保持(zeromq)套接字打开。这意味着我必须手动找到它们(我使用lsof-I),然后使用PID杀死它们

因此,我正在寻找一种更简单的方法,当我点击ctrl+C时,自动从shell中删除这些python进程。在上,我找到了一些应该可以完成我需要的任务的代码。我只是不了解代码的任何内容,以及如何根据需要调整代码

有人能帮我吗

cat >work.py <<'EOF'
import sys, time, signal
signal.signal(signal.SIGINT, signal.SIG_DFL)
for i in range(10):
    time.sleep(1)
    print "Tick from", sys.argv[1]
EOF 
chmod +x work.py

function process {
    python ./work.py $1
}

process one &
wait $!
echo "All done!"

cat>work.py让bash脚本捕获SIGINT,并让它杀死当前进程组中的所有内容:

intexit() {
    # Kill all subprocesses (all processes in the current process group)
    kill -HUP -$$
}

hupexit() {
    # HUP'd (probably by intexit)
    echo
    echo "Interrupted"
    exit
}

trap hupexit HUP
trap intexit INT

python prog1.py &
python prog2.py &
python prog3.py &

wait

+1很好,我曾尝试使用作业控制创建相同的脚本,但bash没有提供指定多个作业的方法,对此我感到非常失望
kill%?python
会有意义的。那太棒了!谢谢!只是一个问题;我将您的代码最小化为下面的代码,看起来也一样。剩下的是什么/bin/bash intexit(){kill-HUP-$$;exit;}trap intexit INT python prog1.py&python prog2.py&python prog3.py
hupexit
打印出一条漂亮的消息,
wait
只是为了让代码看起来更统一(我们在后台启动一切并等待).但是hupexit HUP的陷阱是什么?当程序在ssh远程设备上运行时,这一点非常有效。但是当我在机器B上运行它时,它是从a上ssh'ed的,而a又是从我的本地机器上ssh'ed的,ctrl+c会停止所有stdout和stderr消息,但是进程仍然按照top运行。您知道为什么双ssh转发会使ctrl+c无法正常工作吗?