如何并行运行多个命令并查看两个命令的输出?

如何并行运行多个命令并查看两个命令的输出?

具体来说,我想运行

lsyncd lsyncd.lua

webpack --progress --color -w

这两个都是长时间运行的进程。我想在我的终端中看到这两个进程的输出。结果有点混乱也没关系,我只想看到它们在做它们应该做的事情。

另外,我希望当我按下时它可以终止这两个进程Ctrl+C


我想

parallel ::: 'lsyncd lsyncd.lua' 'webpack --progress --color -w'

这似乎有效,但我看不到任何输出,即使我单独运行这些命令时,它们会输出一些内容。

答案1

GNU Parallel 默认将输出推迟到作业完成为止。您可以改为要求它在有满行时立即打印输出。

parallel  --lb ::: 'lsyncd lsyncd.lua' 'webpack --progress --color -w'

它避免了输出的半行混合:

parallel -j0 --lb 'echo {};echo -n {};sleep {};echo {}' ::: 1 3 2 4

花 20 分钟阅读 GNU Parallel 2018 的第 1+2 章(在线的打印)。你的命令行会因此而喜欢你。

答案2

使用parallel(在moreutils包中):

parallel -j 2 -- 'lsyncd lsyncd.lua' 'webpack --progress --color -w'

由于该parallel进程在前台运行,按CTRL+C将立即终止在其上运行的所有进程。

  • -j:用于限制同时运行的作业数量;
  • --:将选项与命令分开。
% parallel -j 2 -- 'while true; do echo foo; sleep 1; done' 'while true; do echo bar; sleep 1; done'
bar
foo
bar
foo
bar
foo
^C
%

答案3

&来救援。它并行启动这两个进程。

lsyncd lsyncd.lua & webpack --progress --color -w

这会起到作用。

没读到这kill部分。这里的 ctrl+C 只会终止第二个。前面的进程&在后台运行,尽管它在 上输出stdout

终止两个进程的最短方法是:1. 输入 Ctrl+C 一次。这会终止前台进程。2. 输入fg并再次输入 Ctrl+C。这会将后台进程调到前台并将其终止。

呼呼!

答案4

您有更多选择。运行第一个命令并按 Ctrl-Z。这会使命令在后台等待。现在输入bg,它将在后台运行。现在运行第二个命令并再次按 Ctrl-Z。bg再次输入,两个程序都将在后台运行。

现在您可以输入jobs,它会打印出哪些命令正在后台运行。输入fg <job number>以将程序再次置于前台。如果您省略作业编号,它会将最后一个作业置于前台。当作业在前台时,您可以使用 Ctrl-C 停止它。我不知道您如何用一个 Ctrl-C 停止两者。

您还可以&在末尾添加 ,使其立即在后台运行,而无需按 Ctrl-Z 和bg。您仍然可以使用 将其置于前台fg

相关内容