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

时间:2013-09-04 00:46:54

标签: linux multithreading shell

Linux中是否有任何工具/命令可用于同时在多个选项卡中运行命令?我想在多个shell中同时运行相同的命令: ./ myprog argument1 argument2 (我想增加这个以便稍后将我的代码置于压力之下)来检查互斥锁是否正常工作在线程程序中很好。

我正在寻找类似墙壁的东西。我可以想到使用tty,但如果我必须将它扩展到更多的shell,那就好像很痛苦。

9 个答案:

答案 0 :(得分:2)

为什么不做类似

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

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

答案 1 :(得分:2)

使用重定向输出异步运行作业是最简单的解决方案,但如果您确实希望每个进程都在自己的终端中运行,那么一个很好的选择是使用终端模拟器,如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终止后保持活动状态,并使用初始yes管道而不是seq,因为它在seq不可用的情况下工作(有很多方法可以迭代!)

会话运行后,您可以单独附加它们以查看输出。 (有关详细信息,请参阅tmux文档。)

答案 2 :(得分:1)

安装moreutulis软件包(非GNU并行),或者最好是GNU并行(通常单独打包; SUSE称之为gnu_parallel,Ubuntu和RedHat并行调用),因此可以使用parallel。然后弄清楚如何指定命令运行的终端。例如

parallel yourscript -- tty1 tty2 pts6

然后你只需要弄清楚如何编写“yourscript”来将tty作为一个参数运行,这是一个单独的问题。 :)

答案 3 :(得分:1)

如果你正在使用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 man page了解更多选项

答案 4 :(得分:1)

使用GNU Parallel的--tmux --fg

parallel -j20 --tmux --fg echo doit {}\; sleep {} ::: {1..100}

使用 ctrl-b n ctrl-b p 在运行的终端之间循环。

这样,您可以将所有内容保留在一个窗口中,而不会混合作业的输出。

答案 5 :(得分:0)

我在大学期间遇到了同样的情况,我做了类似的事情

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

这会产生10个xterms,每个都在后台运行你的程序。

答案 6 :(得分:0)

根据评论,您似乎不需要标准输入,需要标准记录,不需要标记,不想要screentmux

易peasy:

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

答案 7 :(得分:0)

也许你可以(ab)使用sbt吗?

答案 8 :(得分:-1)

打开一堆终端,设置好所有内容,然后在每个终端中快速点击ENTER。