Como matar todos os processos que foram abertos por um script de shell em ctrl + C?
Eu tenho alguns scripts python que eu inicio coletivamente a partir de um script de shell da seguinte forma:
#!/bin/bash
python prog1.py &
python prog2.py &
python prog3.py
Desde que estou desenvolvendo, muitas vezes quero parar esses processos. Eu normalmente faço isso pressionando ctrl + C, mas infelizmente alguns programas python mantêm (zeromq) soquetes abertos. Isso significa que eu tenho que encontrá-los manualmente (eu usolsof -i), e mate-os usando o PID.
Então, estou procurando uma maneira mais fácil de eliminar automaticamente os processos python do shell quando clico em ctrl + C. Emoutro tópico aqui no Stackoverflow Eu encontrei algum código que supostamente deveria fazer o que eu preciso. Eu simplesmente não entendo nada sobre o código e como posso ajustá-lo às minhas necessidades.
Alguém seria tão gentil em me ajudar aqui?
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!"