Mam kilka skryptów Pythona, który zacznę wspólnie ze skryptu powłoki, co następuje:Jak zabić wszystkie procesy, które zostały otwarte przez skrypt powłoki po Ctrl + C?
#!/bin/bash
python prog1.py &
python prog2.py &
python prog3.py
Od Zajmuję często chcą, aby zatrzymać tych procesów. Zwykle robię to naciskając ctrl + C, ale niefortunnie otwarte są kilka gniazd Pythona (zeromq). Oznacza to, że muszę ręcznie je znaleźć (używam lsof -i) i zabić je za pomocą PID.
Poszukuję łatwiejszego sposobu automatycznego zabicia procesów Pythona z powłoki po naciśnięciu Ctrl + C. Na another thread here on Stackoverflow znalazłem kod, który rzekomo powinien zrobić to, czego potrzebuję. Po prostu nie rozumiem nic o kodzie i jak mogę go dostosować do moich potrzeb.
Czy ktoś byłby tak uprzejmy, aby mi pomóc?
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!"
+1 miła, starałem się stworzyć ten sam scenariusz z kontrolą pracy i jestem bardzo rozczarowany bash nie oferuje sposobu na określenie wielu zadań. 'kill%? python' miałoby sens. – kojiro
To jest niesamowite! Wielkie dzięki! Tylko pytanie; Zminimalizowałem twój kod do kodu poniżej, który wydaje się działać tak samo. Po co na resztę? #!/Bin/bash intexit() {kill -HUP - $$; wyjście; } trap intexit INT python prog1.py i python prog2.py i python prog3.py – kramer65
'hupexit' wypisuje ładną wiadomość,' wait' jest po prostu tak, że kod wygląda bardziej jednolicie (zaczynamy wszystko w tło i czekać). – nneonneo