Многообразный How to run commands in parallel and see output from both?

Specifically, I want to run

lsyncd lsyncd.lua

And

webpack --progress --color -w

Which пахал both long-running processes. I want to see the output from both, interlaced in my терминал. It doesn't matter if the results пахал в бит jumbled, I just like to see that they're doing what they're supposed to.

Also, I want it to kill both processes when I press Ctrl+C.


гm trying

parallel ::: 'lsyncd lsyncd.lua' 'webpack --progress --color -w'

which seems to be working, but I can't see any output even though when I run those commands individually, they output something.

4
задан 17 December 2015 в 21:48

5 ответов

Используя parallelmoreutils пакет):

parallel -j 2 -- 'lsyncd lsyncd.lua' 'webpack --progress --color -w'

Начиная с parallel выполнения процесса на переднем плане, совершая нападки CTRL + C завершат все процессы, работающие сверху его сразу.

  • -j: Используйте для ограничения количества заданий, которые выполняются одновременно;
  • --: разделяет опции от команд.
% parallel -j 2 -- 'while true; do echo foo; sleep 1; done' 'while true; do echo bar; sleep 1; done'
bar
foo
bar
foo
bar
foo
^C
%
2
ответ дан 1 December 2019 в 09:14

Значения по умолчанию Параллели GNU к отсрочке вывода до задания закончены. Можно вместо этого попросить, чтобы это распечатало вывод как скоро, существует сплошная линия.

parallel  --lb ::: 'lsyncd lsyncd.lua' 'webpack --progress --color -w'

Это избегает смешивания полустроки вывода:

parallel -j0 --lb 'echo {};echo -n {};sleep {};echo {}' ::: 1 3 2 4

Проводят 20 минут, читая главу 1+2 Параллели GNU 2018 ( онлайн , распечатал ). Ваша командная строка будет любить Вас за него.

3
ответ дан 1 December 2019 в 09:14

У Вас есть больше опций. Выполните первую команду и нажмите Ctrl-Z. Это помещает команду для ожидания в фоновом режиме. Теперь тип bg и это будут работать в фоне. Теперь выполните вторую команду и нажмите Ctrl-Z снова. Тип bg снова и обе программы будут работать в фоне.

Теперь можно ввести jobs, и это распечатает, какие команды работают в фоне. Тип fg <job number> для помещения программы в переднем плане снова. При исключении числа задания, оно поместит последнее задание в передний план. Когда задание находится на переднем плане, можно остановить его с Ctrl-C. Я не знаю, как Вы остановили бы обоих с одним Ctrl-C.

можно также добавить & в конце, который помещает его работающий в фоновом режиме сразу без Ctrl-Z и bg. Можно все еще принести его на переднем плане с fg.

1
ответ дан 1 December 2019 в 09:14

& к спасению. Это запускает два процесса параллельно.

lsyncd lsyncd.lua & webpack --progress --color -w

Это добьется цели.

не читал kill часть. ctrl+C здесь только завершил бы второй. Процесс, предшествующий & выполнения в фоновом режиме, хотя это производит на stdout.

самый короткий способ завершить оба процесса: 1. Введите Ctrl+C однажды. Это уничтожает приоритетный процесс. 2. Тип fg и тип Ctrl+C снова. Это приносит фоновый процесс к переднему плану и уничтожает его также.

HTH!

1
ответ дан 1 December 2019 в 09:14

Есть легкий способ сделать это, не устанавливая ничего.

Шаг 1 : Создайте файл сценария runner.sh

#!/bin/bash
lsyncd lsyncd.lua &
P1=$!
webpack --progress --color -w &
P2=$!
wait $P1 $P2

Шаг 2 : Сделайте его исполняемым

chmod +x runner.sh

Шаг 3 : Запустите его

./runner.sh

Работает как крем

Объяснение :

  1. some_command & означает запустить some_command и поместить его в фоновый режим
  2. lsyncd lsyncd.lua & означает запустить lsyncd lsyncd.lua и поместить этот процесс в фоновом режиме.

Примечание : это работает с дистрибутивами Linux на основе Debian , такими как Ubuntu

1
ответ дан 3 March 2020 в 13:36

Другие вопросы по тегам:

Похожие вопросы: