Como executar vários comandos em paralelo e ver a saída de ambos?

1

Especificamente, quero executar

lsyncd lsyncd.lua

e

webpack --progress --color -w

Quais são os dois processos de longa duração. Eu quero ver a saída de ambos, entrelaçados no meu terminal. Não importa se os resultados são um pouco desordenados, eu só gosto de ver que eles estão fazendo o que deveriam.

Além disso, quero que ele mate os dois processos quando eu pressionar Ctrl+C .

Estou tentando

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

que parece estar funcionando, mas não consigo ver nenhuma saída, mesmo quando executo esses comandos individualmente, eles emitem algo.

    
por mpen 17.12.2015 / 19:27

3 respostas

1

Usando parallel (no pacote moreutils ):

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

Como o processo parallel é executado em primeiro plano, pressionar CTRL + C terminará todos os processos executados em cima dele de uma só vez.

  • -j : use para limitar o número de trabalhos que são executados ao mesmo tempo;
  • -- : separa as opções dos comandos.
% 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
%
    
por kos 18.12.2015 / 06:19
1

Você tem mais opções. Execute o primeiro comando e pressione Ctrl-Z. Isso coloca o comando para aguardar em segundo plano. Agora digite bg e ele será executado em segundo plano. Agora, execute o segundo comando e pressione Ctrl-Z novamente. Digite bg novamente e ambos os programas serão executados em segundo plano.

Agora você pode digitar jobs e imprimir quais comandos estão sendo executados em segundo plano. Digite fg <job number> para colocar o programa em primeiro plano novamente. Se você omitir o número do trabalho, colocará o último trabalho em primeiro plano. Quando o trabalho está em primeiro plano, você pode pará-lo com Ctrl-C. Eu não sei como você iria parar os dois com um Ctrl-C.

Você também pode adicionar & no final, o que o coloca em segundo plano em execução imediatamente, sem Ctrl-Z e bg . Você ainda pode trazê-lo em primeiro plano com fg .

    
por nobody 17.12.2015 / 19:51
1

& para o resgate. Ele lança os dois processos em paralelo.

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

Isso fará o truque.

Não leu a parte kill . Um ctrl + C aqui só terminaria o segundo. O processo que precede o & é executado em segundo plano, embora seja gerado no stdout .

O caminho mais curto para terminar ambos os processos é: 1. Digite Ctrl + C uma vez. Ele mata o processo de primeiro plano. 2. Digite fg e digite Ctrl + C novamente. Ele traz o processo em segundo plano para o primeiro plano e também o mata.

HTH!

    
por Donbhupi 17.12.2015 / 19:50