Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在多个选项卡/shell中同时运行相同的linux命令?_Linux_Multithreading_Shell - Fatal编程技术网

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

如何在多个选项卡/shell中同时运行相同的linux命令?,linux,multithreading,shell,Linux,Multithreading,Shell,Linux中是否有任何工具/命令可用于同时在多个选项卡中运行命令?我想在多个shell中同时运行相同的命令:./myprog argument1 argument2(我想增加该命令,以便稍后对代码施加压力),以检查互斥体在线程程序中是否工作正常 我在寻找一种像墙一样的东西。我可以考虑使用tty,但如果我必须将其扩展到更多的外壳,那似乎会很痛苦。为什么不做类似的事情呢 for i in {1..100} do ./myprog argument1 argument2 & done

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


我在寻找一种像墙一样的东西。我可以考虑使用tty,但如果我必须将其扩展到更多的外壳,那似乎会很痛苦。

为什么不做类似的事情呢

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

这是在shell为bash的情况下。在其他shell的情况下,您可以研究其他循环构造。

安装moreutulis包(使用非GNU并行),或者最好是GNU并行(通常单独打包;SUSE称之为GNU_并行,Ubuntu和RedHat称之为并行),这样您就可以使用并行。然后了解如何指定命令运行的终端。比如说

parallel yourscript -- tty1 tty2 pts6

然后,您只需找出如何编写“您的脚本”,将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终端以获得更多选项

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


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

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

我在大学时也遇到过同样的情况,我做过类似的事情

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

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

从评论中可以看出,您似乎不需要stdin、不需要stdout、不需要PTY、不需要
屏幕
tmux

简易豌豆:

for seq in `seq 5`; do
        ./myprog argument1 argument2 >output$seq &
done
也许你可以(ab)使用它?

使用GNU并行的
--tmux--fg

parallel -j20 --tmux --fg echo doit {}\; sleep {} ::: {1..100}
使用ctrl-b n和ctrl-b p在运行的终端之间循环


这样,您可以将所有内容都保存在一个窗口中,但不需要混合作业的输出。

Ummm。。。这是在同一个shell中多次运行同一命令。(顺序不少于)为什么需要多个外壳?如果需要单独的shell,可以执行
/bin/sh-c./myprog argument1 argument2&
。它们是平行的,因为-,迫使它们成为背景。啊,我没有看到-。但这仍然无济于事。假设我希望看到每个命令行用户从各自的shell中输入命令时会看到什么,因此我希望从终端的不同shell/选项卡中看到它。这将使输出混乱。不是很理想。这正是UNIX要避免的事情。在“多个选项卡”中?我不确定Unix是否在构建时考虑了选项卡。也许他可以用诅咒图书馆,但谁还会用呢?这是一个长期项目的一部分吗?或者只是他正在做的一种一次性测试?我用
tmux
命令做过,但是我的代码非常糟糕,因为我正在拆分窗格,而不是使用windows,这可能是正确的做法。请注意,moreutils不是GNU,moreutils中的并行不是GNU并行,而是另一个程序。@OleTange很好的捕获。已编辑。尽管github说您在差不多一年后编写了此功能;),这是现在最好的解决方案。我很高兴我被带到这里来了解它的存在D