Bash 如何在ctrl+;C
我有两个python脚本,我从shell脚本集中开始,如下所示: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
#!/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.pyhupexit
打印出一条漂亮的消息,wait
只是为了让代码看起来更统一(我们在后台启动一切并等待).但是hupexit HUP的陷阱是什么?当程序在ssh远程设备上运行时,这一点非常有效。但是当我在机器B上运行它时,它是从a上ssh'ed的,而a又是从我的本地机器上ssh'ed的,ctrl+c会停止所有stdout和stderr消息,但是进程仍然按照top运行。您知道为什么双ssh转发会使ctrl+c无法正常工作吗?