我觉得这个问题应该在某个地方得到回答,但我一生都找不到它,所以我想我只想问......
我试图在终端中同时运行 2 个命令,但我需要它们同时运行,并且这两个命令都是正在进行的前台命令。
我怎样才能做到这一点?
例如:
npm run serve
和docker-compose up
。
我知道我可以使用单个命令行运算符运行多个“结束/停止”命令,例如&&
,;
或者||
但我需要在同一个终端窗口中同时运行两个命令,使用单个命令,其中标准cntrl + c
结束操作。这可能吗?
答案1
您使用单个&
command1 & command2 &
他们中的每一个都将从背景。
您可能会侥幸让 2 个任务并行运行:
parallel <<EOF
command1
command2
EOF
但这并不是纯粹的狂欢。我刚刚检查过,如果你使用parallel
,如果你杀死团体,它会杀死从并行启动的子进程:
kill -- -pid-of-parallel
因此,如果并行进程的 pid 为 54,则运行:
kill -- -54
那应该有效。
答案2
您无法同时在同一终端中拥有两个前台进程,但可以拥有多个后台进程。
正如其他答案中提到的,您可以提供一个 bash 单行代码,它将创建两个进程,每个进程都在后台运行:
命令1 & 命令2 &
两个进程的输出将到达同一个终端,但您无法与其中任何一个进行交互,因为它们都在后台。要与其中之一交互,您可以使用 ' 将其带到前台弗格'。然后将其放回后台,您可以使用Ctrl+Z暂停程序,然后是 '背景' 以允许程序继续在后台运行。
您可以使用 '全杀' 命令来终止进程而不是Ctrl+C因为这些进程位于后台。或者您可以使用 '弗格' 命令将进程带回到前台,然后您可以使用Ctrl+C杀死他们。
使用 '工作' 命令查看您的 shell 中正在运行哪些后台进程。您可以使用 '重量%' 将特定作业带到前台。