有没有办法在执行下一个命令之前等待(在 bash 脚本中)python 程序(在新终端中启动)结束?
Is there a way to wait (in a bash script) for a python program (started in a new terminal) to end before executing the next command?
为了自动化模拟,我创建了一个 bash 脚本(见下文) 运行 3 个 python 并行程序,与套接字互连,每个都在一个新终端中(的行为该软件要求 3 个子程序在不同的终端中 运行。
#!/bin/bash
gnome-terminal -- ./orchestrator.py -c config/orchestrator/configWorstCaseRandomV.yml -v
gnome-terminal -- ./server.py -c config/server/config.yml -s config/server/systems/ault14mix.yml --simulate -v
gnome-terminal -- ./simulation/traces/simulate_traces.py -m September
我想做的是重新执行相同的 3 个 pythons 程序,但仅在前 3 个程序结束后使用不同的参数。但是这里的 3 个程序是同时启动的,我无法知道什么时候在我的 bash 脚本中结束。
我试图简单地在我的脚本末尾添加相应的命令,但逻辑上它不会等待前面的模拟完成来启动接下来的 3 个程序。
所以我的问题是,在执行 bash 脚本的下一行之前,有没有办法知道程序何时在另一个终端结束?
我假设 gnome-terminal 仅用于 运行 并行程序,没有它,每个 Python 脚本都会 运行 在前台。
在这种情况下,您可以 运行 他们在后台使用符号字符 &
(而不是 gnome-terminal)并使用 $!
获取他们的进程 ID,最后等待他们使用 wait
命令,例如:
#!/bin/bash
./orchestrator.py -c config/orchestrator/configWorstCaseRandomV.yml -v &
pid1=$!
./server.py -c config/server/config.yml -s config/server/systems/ault14mix.yml --simulate -v &
pid2=$!
./simulation/traces/simulate_traces.py -m September &
pid3=$!
wait $pid1 $pid2 $pid3
为了自动化模拟,我创建了一个 bash 脚本(见下文) 运行 3 个 python 并行程序,与套接字互连,每个都在一个新终端中(的行为该软件要求 3 个子程序在不同的终端中 运行。
#!/bin/bash
gnome-terminal -- ./orchestrator.py -c config/orchestrator/configWorstCaseRandomV.yml -v
gnome-terminal -- ./server.py -c config/server/config.yml -s config/server/systems/ault14mix.yml --simulate -v
gnome-terminal -- ./simulation/traces/simulate_traces.py -m September
我想做的是重新执行相同的 3 个 pythons 程序,但仅在前 3 个程序结束后使用不同的参数。但是这里的 3 个程序是同时启动的,我无法知道什么时候在我的 bash 脚本中结束。
我试图简单地在我的脚本末尾添加相应的命令,但逻辑上它不会等待前面的模拟完成来启动接下来的 3 个程序。
所以我的问题是,在执行 bash 脚本的下一行之前,有没有办法知道程序何时在另一个终端结束?
我假设 gnome-terminal 仅用于 运行 并行程序,没有它,每个 Python 脚本都会 运行 在前台。
在这种情况下,您可以 运行 他们在后台使用符号字符 &
(而不是 gnome-terminal)并使用 $!
获取他们的进程 ID,最后等待他们使用 wait
命令,例如:
#!/bin/bash
./orchestrator.py -c config/orchestrator/configWorstCaseRandomV.yml -v &
pid1=$!
./server.py -c config/server/config.yml -s config/server/systems/ault14mix.yml --simulate -v &
pid2=$!
./simulation/traces/simulate_traces.py -m September &
pid3=$!
wait $pid1 $pid2 $pid3