如何同时处理多个命令并仅在 ubuntu 上完成所有操作后才继续其余命令
how to process several commands concurrently and continue the rest only after all is done on ubuntu
具体来说,我有两个命令需要运行在shell在Ubuntu同时,例如 command_A 和 command_B 。我还有一些其他命令需要 运行 只有在 command_A 和 [=13 之后=]command_B完成,命名为command_rest。另外,command_A和command_B 运行 在单独的终端中,完成后可以自行关闭。我想这可能需要与 signal 和 wait 和 gnome-terminal 相关的技术,但我找不到一个解决方案。
你可以像这样使用 fifo 来同步:
# Once in either Terminal
mkfifo A B
# In first Terminal
( echo CommandA; sleep 3; echo done > A ) &
# In second Terminal
( echo CommandB; sleep 8; echo done > B ) &
# In third Terminal
read < A; read < B; echo Rest
基本上,在 Rest
可以 运行 之前,它必须从 A
和 B
中读取一些东西,直到 CommandA
已完成并写入 A
并且 CommandB
已完成并写入 B
.
上面只是一个例子,它回显了 CommandA
和 CommandB
以及 Rest
而不是 运行ning 我没有的命令。你实际上会想要这样的东西(我已经修改它所以你可以在各种终端的不同目录中)
# Once in either Terminal
mkfifo /tmp/A /tmp/B
# In first Terminal
( CommandA; echo done > /tmp/A ) &
# In second Terminal
( CommandB; echo done > /tmp/B ) &
# In third Terminal
read < /tmp/A; read < /tmp/B; commandRest
由于您似乎不太擅长基于 fifo 的同步,您可以尝试使用 GNU Parallel,它在安装后会创建一个符号 link 调用 sem
作为信号量。
因此,在 1 号航站楼,您可以:
sem -j 2 --id mark CommandA
在 2 号航站楼,您可以:
sem -j 2 --id mark CommandB
然后,如果您想等待两者完成,您可以这样做:
sem --id mark --wait ; CommandRest
具体来说,我有两个命令需要运行在shell在Ubuntu同时,例如 command_A 和 command_B 。我还有一些其他命令需要 运行 只有在 command_A 和 [=13 之后=]command_B完成,命名为command_rest。另外,command_A和command_B 运行 在单独的终端中,完成后可以自行关闭。我想这可能需要与 signal 和 wait 和 gnome-terminal 相关的技术,但我找不到一个解决方案。
你可以像这样使用 fifo 来同步:
# Once in either Terminal
mkfifo A B
# In first Terminal
( echo CommandA; sleep 3; echo done > A ) &
# In second Terminal
( echo CommandB; sleep 8; echo done > B ) &
# In third Terminal
read < A; read < B; echo Rest
基本上,在 Rest
可以 运行 之前,它必须从 A
和 B
中读取一些东西,直到 CommandA
已完成并写入 A
并且 CommandB
已完成并写入 B
.
上面只是一个例子,它回显了 CommandA
和 CommandB
以及 Rest
而不是 运行ning 我没有的命令。你实际上会想要这样的东西(我已经修改它所以你可以在各种终端的不同目录中)
# Once in either Terminal
mkfifo /tmp/A /tmp/B
# In first Terminal
( CommandA; echo done > /tmp/A ) &
# In second Terminal
( CommandB; echo done > /tmp/B ) &
# In third Terminal
read < /tmp/A; read < /tmp/B; commandRest
由于您似乎不太擅长基于 fifo 的同步,您可以尝试使用 GNU Parallel,它在安装后会创建一个符号 link 调用 sem
作为信号量。
因此,在 1 号航站楼,您可以:
sem -j 2 --id mark CommandA
在 2 号航站楼,您可以:
sem -j 2 --id mark CommandB
然后,如果您想等待两者完成,您可以这样做:
sem --id mark --wait ; CommandRest