Existe alguma ferramenta / comando no Linux que eu possa usar para executar um comando em mais de uma guia simultaneamente? Eu quero executar o mesmo comando: ./myprog argument1 argument2
simultaneamente em mais de um shell para verificar se os mutexes estão funcionando bem em um programa encadeado. Quero poder aumentar o número de instâncias desse programa para colocar meu código sob estresse mais tarde.
Eu estou procurando algo como o que a parede faz. Eu posso pensar em usar tty's, mas isso parece muita dor se eu precisar escalar isso para muito mais conchas.
shell
terminal
parallelism
Arpith
fonte
fonte
myprog
instâncias filho e agrega sua saída para você.Respostas:
Como mavillan já sugeriu, basta usar o terminator . Permite exibir muitos terminais de maneira lado a lado. Ao ativar o recurso de transmissão, você pode inserir o mesmo comando simultaneamente em cada terminal.
Aqui está um exemplo com o comando date transmitido para uma grade de 32 terminais.
fonte
O tmux tem esse recurso. (junto com muitos outros recursos úteis na mesma linha)
Pode ser feito via:
fonte
Multixterm
Outra ferramenta para adicionar à lista é uma chamada
multixterm
. Ele usaxterm
terminais. Você pode invocá-lo assim:E uma vez instalado, você receberá uma GUI.
Você pode começar a girar as
xterm
janelas clicando nonew xterm
botão Aqui, por exemplo, chamei 2. Se você clicar na janela principal, poderá começar a digitar comandos nas duas janelas simultaneamente:keyboardcast
Parece estar disponível apenas no Ubuntu, é semelhante ao multixterm.
excerto
fonte
Isso pode ser alcançado usando o iTerm2
Referência: http://korishev.com/blog/2014/02/28/iterm2-broadcast-input/
fonte
Você pode fazer algo como:
Ou, se a saída de cada comando for relevante durante a execução, você poderá configurar a tela.
A tela requer mais trabalho manual.
fonte
tail -f
o arquivo de log em vez de configurar centenas de telas.tail -f *.log
Eu sou um usuário do KDE, com o konsole 2.13.2 no KDE 4.13.3, você pode fazer isso:
konsole aberto
dividir vista verticalmente
escreva simultaneamente em cada terminal dentro da janela
fonte
Experimente o Terminator (terminal do emulador). Pode ter muitas sessões de shell na mesma janela e você pode transmitir um comando para todas elas.
Exterminador do Futuro
fonte
Você pode usar uma ferramenta como o MobaXterm e ela permitirá que você se conecte simultaneamente e cole seus comandos em todas as suas janelas.
fonte
Se você deseja apenas ver a saída da 100ª execução do programa:
fonte
Você pode controlar
konsole
completamenteDCOP
. Um exemplo é daqui :fonte
Eu concordo com o comentário que o @msw faz acima. Isso escreverá um script para ser iniciado por um
sh
processo em segundo plano e imprimirá osh
pid do processo filho , para que você possa monitorá-lo e seus filhos enquanto ele funciona.fonte
O @Jinpeng estava no caminho certo com o GNU Parallel , mas não a implementação.
Exemplo: Execute 10 instâncias paralelas do seu programa, com cada thread executando seu programa apenas uma vez:
Exemplo: Execute 10 threads paralelos, com cada um desses threads executando seu programa infinitamente:
Você pode escalar isso facilmente para centenas de threads, substituindo o dos
10
meus exemplos.Se o seu programa produz mensagens stdout e você deseja vê-las como são produzidas (em vez do padrão que as agrupa), a
--ungroup
opção paralela pode ser útil.Se você estiver executando muitos encadeamentos da estação de trabalho e não desejar que as coisas deixem de responder, considere
nice
a subárvore inteira do processo no momento da inicialização.Nota lateral, GNU Parallel normalmente não é instalado por padrão, mas é geralmente em seus repositórios de pacotes normais, então basta instalá-lo como qualquer outro pacote:
dnf install parallel
,apt-get install parallel
,brew install parallel
, etc.fonte
Você pode iniciar processos em segundo plano com
nohup
.Exemplo:
Saída:
Lembre-se de matar a tarefa mais tarde com o dado
PID
:Para trazer o processo em primeiro plano, você deve inserir o número do trabalho, neste caso
[1]
:fonte
GNU paralelo é exatamente a ferramenta que você está procurando.
parallel -j 9 yourcommand
fonte
Meu pequeno para moer:
Fará a configuração do terminador (termos de layout) para muitas janelas em um grupo.
EDIT: Pelo menos, o terminador pode enviar broadcast para todos os terminais do mesmo grupo. Esta função é selecionável - portanto, você pode habilitá-lo para escrever 'su -', depois desativar e escrever a senha devida nos terminais onces e habilitá-la novamente.
fonte