Czy jest jakieś narzędzie / polecenie w systemie Linux, którego można użyć do uruchomienia polecenia na więcej niż jednej karcie jednocześnie? Chcę uruchomić to samo polecenie: ./myprog argument1 argument2
jednocześnie w więcej niż jednej powłoce, aby sprawdzić, czy muteksy działają poprawnie w programie wątkowym. Chcę być w stanie zwiększyć liczbę wystąpień tego programu, aby później obciążać mój kod.
Szukam czegoś w rodzaju tego, co robi ściana. Mogę myśleć o użyciu tty, ale wydaje mi się, że to bardzo bolesne, jeśli muszę skalować to do wielu innych powłok.
shell
terminal
parallelism
Arpith
źródło
źródło
myprog
instancje potomne i agreguje dla nich swoje wyniki.Odpowiedzi:
Jak już sugerował mavillan, użyj terminatora . Umożliwia wyświetlanie wielu terminali w sposób kafelkowy. Po włączeniu funkcji rozgłaszania możesz wprowadzić to samo polecenie jednocześnie na każdym terminalu.
Oto przykład z poleceniem date wysłanym do siatki 32 terminali.
źródło
tmux ma taką możliwość. (wraz z wieloma innymi przydatnymi możliwościami w tym samym stylu)
Można to zrobić za pomocą:
źródło
Multixterm
Kolejnym narzędziem do dodania do listy jest jedno o nazwie
multixterm
. Używaxterm
terminali. Możesz go wywołać w następujący sposób:A kiedy się pojawi, zostanie wyświetlony interfejs GUI.
Następnie możesz rozpocząć rozkładanie
xterm
okien, klikającnew xterm
przycisk. Tutaj na przykład wywołałem 2. Jeśli następnie klikniesz okno główne, możesz rozpocząć wpisywanie poleceń w obu oknach jednocześnie:cast klawiatury
Wygląda na to, że jest dostępny tylko na Ubuntu, wygląda podobnie do multixterm.
fragment
źródło
Można to osiągnąć za pomocą iTerm2
Odniesienie: http://korishev.com/blog/2014/02/28/iterm2-broadcast-input/
źródło
Możesz zrobić coś takiego:
Lub jeśli dane wyjściowe każdego polecenia są istotne podczas wykonywania, możesz ustawić ekran.
Ekran wymaga więcej pracy ręcznej.
źródło
tail -f
plik dziennika zamiast setki ekranów.tail -f *.log
Jestem użytkownikiem KDE, z konsolą 2.13.2 w KDE 4.13.3 możesz to zrobić:
otwórz konsolę
podziel widok w pionie
pisz jednocześnie na każdym terminalu w oknie
źródło
Wypróbuj Terminator (terminal emulatora). Może mieć wiele sesji powłoki w tym samym oknie i możesz wysłać polecenie do wszystkich z nich.
Terminator
źródło
Możesz użyć narzędzia takiego jak MobaXterm, które pozwoli ci połączyć się jednocześnie, a następnie wkleić polecenia do wszystkich okien.
źródło
Jeśli chcesz zobaczyć tylko wynik 100. wykonania programu:
źródło
Można kontrolować
konsole
poprzezDCOP
. Przykładem jest tutaj :źródło
Zgadzam się z powyższym komentarzem @msw. Spowoduje to napisanie skryptu, który zostanie uruchomiony przez
sh
proces działający w tle , i wydrukowaniesh
pid procesu potomnego , abyś mógł monitorować go i jego potomków podczas działania.źródło
@Jinpeng był na dobrej drodze z GNU Parallel , tylko nie implementacją.
Przykład: Uruchom 10 równoległych instancji programu, z każdym wątkiem uruchamiającym program tylko raz:
Przykład: Uruchom 10 równoległych wątków, z których każdy z tych wątków będzie działał bez końca:
Możesz łatwo skalować to do setek wątków, zastępując
10
w moich przykładach.Jeśli twój program generuje jakieś standardowe komunikaty i chcesz je widzieć tak, jak są tworzone (zamiast domyślnego, który je zestawia),
--ungroup
opcja równoległa może być użyteczna.Jeśli uruchamiasz wiele wątków ze stacji roboczej i nie chcesz, aby wszystko przestało odpowiadać, rozważ
nice
rozważenie poddrzewa całego procesu w czasie uruchamiania.Dygresja, GNU równoległy nie jest zazwyczaj instalowany domyślnie, ale zazwyczaj w normalnych repo opakowania, więc po prostu zainstalować go jak każdy inny pakiet:
dnf install parallel
,apt-get install parallel
,brew install parallel
, itd.źródło
Możesz rozpocząć procesy w tle za pomocą
nohup
.Przykład:
Wydajność:
Pamiętaj, aby zabić zadanie później za pomocą podanego
PID
:Aby przenieść proces na pierwszy plan, musisz wprowadzić numer zadania, w tym przypadku
[1]
:źródło
GNU równoległe jest dokładnie tym narzędziem, którego szukasz.
parallel -j 9 yourcommand
źródło
Mój mały do frezowania:
Wykona konfigurację terminatora (warunki układu) dla wielu okien w jednej grupie.
EDYCJA: Przynajmniej terminator może wysyłać rozgłoszenie do każdego terminala w tej samej grupie. Tę funkcję można przełączać - możesz więc włączyć zapisywanie su - następnie wyłącz i zapisz własne hasło na terminalach i włącz je ponownie.
źródło