我正在寻找一个unix shell命令,它允许我在后台运行一个进程(恰好是一个web服务器),只要另一个前台进程(恰好是一个测试套件)就可以执行。即,在前台进程退出后,后台进程也应该退出。到目前为止我所拥有的是
.. preliminary work .. && (webserver & test)
接近,但失败的是,网络服务器进程永远不会退出。是否有一种很好的方法可以在单个命令中表达这一点,或者为此编写更详细的脚本更合理?
为了提供更多详细信息(并欢迎任何相关建议),我正在编写一个javascript库,我想使用Selenium进行测试 - 因此需要webserver执行'并行'测试套房。在我试图取消Grunt&合。并按照leaner, npm-based approach进行任务管理我已经点击了与此相关的道路颠簸。
答案 0 :(得分:2)
你可以试试这个:
# .. preliminary work ..
webserver &
PID=$!
test_suite &
(wait $!; kill $PID)
只要您不介意在后台运行这两个命令,这将有效。这里发生的是:
$PID
。如果您需要任一命令位于前台,请运行此版本
# .. preliminary work ..
screen -dm -S webserver webserver
screen -dm -S test_suite test_suite
(wait "$(screen -ls | awk '/\.test_suite\t/ {print strtonum($1)}')"
screen -X -S webserver -p 0 kill) &
screen -r test_suite
请注意,这需要screen
命令(使用apt-get install screen
进行安装,或者如果您有ubuntu则使用ubuntu's website。这样做是: