只要其他进程(测试套件)执行,就运行后台进程(webserver)

时间:2015-02-07 13:27:25

标签: bash shell unix npm jobs

我正在寻找一个unix shell命令,它允许我在后台运行一个进程(恰好是一个web服务器),只要另一个前台进程(恰好是一个测试套件)就可以执行。即,在前台进程退出后,后台进程也应该退出。到目前为止我所拥有的是

.. preliminary work .. && (webserver & test)

接近,但失败的是,网络服务器进程永远不会退出。是否有一种很好的方法可以在单个命令中表达这一点,或者为此编写更详细的脚本更合理?


为了提供更多详细信息(并欢迎任何相关建议),我正在编写一个javascript库,我想使用Selenium进行测试 - 因此需要webserver执行'并行'测试套房。在我试图取消Grunt&合。并按照leaner, npm-based approach进行任务管理我已经点击了与此相关的道路颠簸。

1 个答案:

答案 0 :(得分:2)

你可以试试这个:

# .. preliminary work ..
webserver &
PID=$!
test_suite &
(wait $!; kill $PID)

只要您不介意在后台运行这两个命令,这将有效。这里发生的是:

  1. 网络服务器在后台启动。
  2. 它的pid已分配给$PID
  3. 测试套件在后台启动。
  4. 最后一行等待测试套件退出,然后杀死网络服务器。
  5. 如果您需要任一命令位于前台,请运行此版本

    # .. 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。这样做是:

    1. 启动网络服务器
    2. 启动测试套件。
    3. 等待测试套件退出,然后杀死网络服务器
    4. 与此同时,在屏幕上恢复测试套件