2013-09-04 2 views
2

Есть ли какой-либо инструмент/команда в Linux, который я могу использовать для запуска команды на нескольких вкладках одновременно? Я хочу запустить ту же команду: ./myprog аргумент1 аргумент2 одновременно в нескольких оболочках (я хочу увеличить это, чтобы позже подвергнуть мой код нагрузке), чтобы проверить, работают ли мьютексы в поточной программе ,Как запустить одну и ту же команду linux в нескольких вкладках/оболочке одновременно?

Я как бы искал что-то вроде стены. Я могу придумать, используя tty, но это просто кажется большой болью, если я должен масштабировать это на многие другие оболочки.

+0

Я делал это с командами 'tmux', но мой код был довольно неприятным, так как я разбивал панели, а не на окна, что, вероятно, и пошло. – o11c

ответ

2

Почему бы не сделать что-то вроде

for i in {1..100} 
do 
    ./myprog argument1 argument2 & 
done 

Это в случае, если оболочка Баш. Вы можете посмотреть другие конструкции цикла в случае других оболочек.

+0

Ummmm ... Это одна и та же команда несколько раз в одной оболочке. (Последовательно не менее.) – Arpith

+2

Почему требование для нескольких оболочек? Вы можете сделать '/ bin/sh -c ./myprog аргумент1 аргумент2 &' в случае, если вам нужны отдельные оболочки. И они параллельны, так как «заставляет их заслонять». –

+0

А я не видел &. Но это все равно не помогает. Позволяет просто сказать, что я хочу видеть, что каждый пользователь командной строки увидит, вошли ли они в команду из своих отдельных оболочек, и, следовательно, я хочу увидеть ее из разных оболочек/вкладок терминала. – Arpith

1

Установите Gnu moreutulis, чтобы использовать GNU параллельно. Затем выяснить, как указать терминал вашей работает команда. Например

parallel yourscript -- tty1 tty2 pts6 

Тогда вы просто должны выяснить, как писать «yourscript» взять TTY для запуска в качестве аргумента, который является отдельным вопрос. :)

1

если вы используете Gnome Terminal, попробуйте это один

gnome-terminal --maximize --tab-with-profile=default -e '/bin/sh -c ./myprog argument1 argument2' --tab-with-profile=default -e '/bin/sh -c ./myprog argument1 argument2' --tab-with-profile=default -e '/bin/sh -c ./myprog argument1 argument2' 

пожалуйста, проверьте гном-терминал man page больше вариантов

2

Запуск заданий асинхронно с перенаправлены выхода самое простое решение, но если вы действительно хотите, чтобы каждый процесс запускался в своем собственном терминале, хорошим вариантом является использование эмулятора терминала, например screen или tmux. Например:

yes | sed 5q | while read k; do # iterate 5 times 
    tmux new-session -d 'sh -c "/path/to/myprog arg1 arg2; sh"'& 
done 

волочить sh вызывает сессию остаться в живых после того, как MyProg завершается, и intial yes трубопровода используется вместо seq, поскольку он работает, где seq не доступен (есть много способов итерации!)

Как только сеансы работают, вы можете подключить их отдельно для просмотра вывода. (См. Документацию tmux.)

+0

+1 для 'yes | sed' трюк. –

-1

Откройте кучу терминалов, настройте все, а затем быстро нажмите ENTER в каждом терминале.

+3

Это именно то, что было сделано UNIX. –

+0

В «более чем одной вкладке»? Я не уверен, что Unix был даже построен с учетом вкладок. Может быть, он мог бы использовать библиотеку curses, но кто больше это использует? Является ли эта часть долгосрочного проекта? Или просто одноразовый тест, который он делает? –

0

У меня была такая же ситуация, когда я был в колледже, и я сделал что-то вроде этого

for i in $(seq 1 10) 
do 
    xterm -e "./myprog argument1 argument2"& 
done 

Это нерестится 10 xterms каждое из которых работает ваша программа в фоновом режиме.

0

От комментариев кажется, что вам не нужен stdin, вам нужно stdout, не хотите ptys, не хотите screen или tmux.

Easy-Peasy:

for seq in `seq 5`; do 
     ./myprog argument1 argument2 >output$seq & 
done 
Смежные вопросы