如何在多个tab / shell中同时运行相同的linux命令?

Linux中是否有任何工具/命令可用于同时在多个选项卡中运行命令? 我想运行相同的命令: ./myprog argument1参数2同时在多个shell(我想增加这个,以便我的代码承受压力)以检查互斥体是否在线程化程序中正常工作。

我有点像墙上的东西。 我可以考虑使用tty,但是如果我不得不把这个扩展到更多的shell,那看起来好像很痛苦。

为什么不这样做

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

这是万一壳是bash。 在其他shell的情况下,您可以查看其他循环结构。

使用重定向输出异步运行作业是最简单的解决方案,但是如果您确实希望每个进程都在自己的终端中运行,那么最好使用终端仿真程序(如screentmux 。 例如:

 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文档。)

安装Gnu moreutulis,以便可以使用GNU并行。 然后找出如何指定你的命令运行的终端。例如

 parallel yourscript -- tty1 tty2 pts6 

那么你只需要弄清楚如何写“yourscript”来把tty作为参数运行,这是一个单独的问题。 🙂

如果你使用的是gnome终端,试试这个

 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' 

请查看gnome-terminal 手册页以获取更多选项

我在大学时也有同样的情况,我做了这样的事情

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

这产生了10个xterm,每个在后台运行你的程序。

从评论看来,你不需要stdin,需要标准输出,不想要ptys,不想screentmux

十分简单:

 for seq in `seq 5`; do ./myprog argument1 argument2 >output$seq & done 

也许你可以(ab)使用clusterssh ?

打开一堆终端,把一切设置好,然后在每个终端上真正快速地敲击回车。