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

具体来说,我想跑

lsyncd lsyncd.lua 

 webpack --progress --color -w 

哪些都是长期运行的流程。 我希望看到两者的输出,在我的终端中隔行扫描。 如果结果有点混乱并不重要,我只是想看到他们正在做他们应该做的事情。

此外,我希望它在按Ctrl+C时终止这两个进程。


我尝试着

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

这似乎工作,但我看不到任何输出,即使我单独运行这些命令,他们输出的东西。

使用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 % 

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

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

您还可以在不使用Ctrl-Z和bg情况下立即添加&使其在后台运行。 你仍然可以用fg把它带到前台。

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

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

这样就可以了。

没看过kill部分。 这里的ctrl + C只会终止第二个。 &之前的进程在后台运行,尽管它在stdoutstdout

终止这两个进程的最短方法是:1。键入Ctrl + C一次。 它杀死了前台进程。 2.键入fg并再次键入Ctrl + C. 它将后台进程带到前台并将其杀死。

HTH!