如何并行运行多个命令并查看两者的输出?
具体来说,我想跑
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只会终止第二个。 &
之前的进程在后台运行,尽管它在stdout
上stdout
。
终止这两个进程的最短方法是:1。键入Ctrl + C一次。 它杀死了前台进程。 2.键入fg
并再次键入Ctrl + C. 它将后台进程带到前台并将其杀死。
HTH!