2016-07-28 4 views
0

Надеюсь, что этот вопрос не задавался слишком много раз, но я не смог найти ответ на google (я не знал, как его указать).Выполнять одновременные команды и прекращать работу при завершении

Кто-нибудь знает, как выполнить две параллельные команды в bash, но, когда один заканчивается, я хотел бы, чтобы другой закончил?

Например, у меня есть два разных питона сценариев:

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

Я хотел бы сделать что-то вроде python3 loop.py ** python3 print.py. Два сценария должны выполняться параллельно, и когда печать заканчивается, цикл заканчивается автоматически.

Мое использование этой команды было бы сделать что-то вроде:

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

Спасибо заранее

+1

'' && не запускать их параллельно. Он запускает первый, * затем * запускает второй, если первый имеет статус выхода 0. – chepner

+0

Хорошо, я отредактирую свой пост –

ответ

1

То, что вы хотите это

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

Запустить первый скрипт в фоновом режиме, затем запустите второй скрипт. Когда закончится второй скрипт, убейте первый.

+0

Ничего себе, отличный ответ :) Оболочка переменной $! (PID последней выполненной команды) определенно то, что мне нужно. Большое спасибо –

0

Не самое чистое решение, но вы можете запускать процессы в фоновом режиме с завершающим &, а затем wait для их завершения.

Каждый из этих процессов должен был убить всех остальных после завершения.

Это может выглядеть следующим образом:

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

'killall Python' не будет ограничиваться этими двумя процессами' python'. – chepner

+0

Да, он убивает все ваши процессы python: D Но, возможно, у вас их нет. – fafl

Смежные вопросы