3

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

我正在寻找类似墙的东西。我可以考虑使用 tty,但如果我必须将其扩展到更多的 shell,这似乎很痛苦。

4

9 回答 9

2

使用重定向输出异步运行作业是最简单的解决方案,但如果您真的希望每个进程在自己的终端中运行,一个不错的选择是使用终端模拟器,如screenor 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详细信息,请参阅文档。)

于 2013-09-04T11:53:37.957 回答
2

为什么不做类似的事情

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

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

于 2013-09-04T00:49:19.933 回答
1

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

parallel yourscript -- tty1 tty2 pts6

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

于 2013-09-04T03:23:10.000 回答
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手册页以获取更多选项

于 2013-09-04T10:43:23.623 回答
1

使用 GNU Parallel 的--tmux --fg

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

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

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

于 2018-08-05T15:08:07.107 回答
0

从评论看来,您不需要标准输入、确实需要标准输出、不需要 ptys、不需要screentmux.

十分简单:

for seq in `seq 5`; do
        ./myprog argument1 argument2 >output$seq &
done
于 2013-09-04T17:20:29.660 回答
0

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

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

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

于 2013-09-04T16:26:00.030 回答
0

也许您可以(ab)为此使用clusterssh

于 2015-06-12T07:08:07.460 回答
-1

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

于 2013-09-04T16:17:55.170 回答