我需要在travis上启动并重新启动自定义Web服务器。使用子shell(.travis.yml
)开始在后台开始:
- if [ "$TEST_ADAPTER" = "HTTP" ]; then (vendor/bin/httpd.php start &); fi
要再次停止/终止该过程,我试图获取其PID然后将其杀死:
- if [ "$TEST_ADAPTER" = "HTTP" ]; then (vendor/bin/httpd.php start &) && SERVER_PID=$!; fi
- ...
- if [ "$TEST_ADAPTER" = "HTTP" ]; then kill -9 $SERVER_PID && ...; fi
但是,SERVER_PID
为空。
在travis上获取后台进程的PID以便停止它的正确方法是什么(复杂化:不使用额外的shell脚本)?
答案 0 :(得分:9)
这里回答的问题是@ xmonk的答案在功能方面是正确的,但需要一个外部shell脚本 - 反过来 - 需要使用临时文件来写pid值。
我刚刚发现travis-ci确实允许多行语句简化了整个过程。把它放在.travis.yml
:
- |
if [ "$TEST_ADAPTER" = "HTTP" ]; then
vendor/bin/httpd.php&
SERVER_PID=$!
fi
答案 1 :(得分:3)
以下内容应该有效:
if [ "$TEST_ADAPTER" = "HTTP" ]; then
vendor/bin/httpd.php&
SERVER_PID=$!
fi
命令周围的()
创建一个子shell。 $!
在您的示例中显示为空,因为程序在子shell中运行,但您的$!
正在父shell上运行。