2016-07-28 8 views
0

Ich hoffe, dass diese Frage nicht zu oft gestellt wurde, aber ich konnte keine Antwort auf Google finden (ich wusste nicht, wie ich es spezifizieren soll).Simultane Befehle ausführen und beenden, wenn man fertig ist

Kann jemand zwei parallele Befehle in bash ausführen, aber wenn einer fertig ist, möchte ich den anderen beenden?

Zum Beispiel, ich habe zwei verschiedenen Python-Skripte:

  • while 1: pass: loop.py
  • print(42): print.py

Ich würde so etwas wie python3 loop.py ** python3 print.py zu tun. Die beiden Skripts müssen parallel ausgeführt werden, und wenn der Druckvorgang beendet ist, wird der Loop automatisch beendet.

Meine Verwendung dieses Befehls wäre so etwas wie zu machen sein:

tcpdump -i any -w out.trace ** python3 network_script.py 

Vielen Dank im Voraus

+1

'' && läuft sie nicht gleichzeitig. Es läuft der erste, * dann * läuft der zweite, wenn der erste einen Exit-Status von 0 hat. – chepner

+0

Ok, ich bearbeite meinen Beitrag –

Antwort

1

Was Sie wollen, ist

tcpdump ... & pid=$! 
python3 network_script.py 
kill $pid 

Führen Sie das erste Skript im Hintergrund, dann starte das zweite Skript. Wenn das zweite Skript beendet ist, töte das erste.

+0

Wow, tolle Antwort :) Shell Variable $! (PID des letzten ausgeführten Befehls) war definitiv was ich brauchte. Vielen Dank –

0

Nicht die sauberste Lösung, aber Sie können Prozesse im Hintergrund mit einem nachlaufenden & starten und dann wait für sie zu vervollständigen.

Jeder dieser Prozesse müsste nach Fertigstellung alle anderen beenden.

Es könnte wie folgt aussehen:

(python loop.py && killall Python) & 
(python print.py && killall Python) & 
wait 
echo "Done with at least one!" 
+1

'Killall Python 'wird nicht auf diese beiden' Python 'Prozesse beschränkt werden. – chepner

+0

Ja, es tötet alle deine Python-Prozesse: D Aber vielleicht hast du keine. – fafl

Verwandte Themen