如何启动和停止 travis 的后台任务?
How can I start and stop a background task on travis?
我需要在 travis 上启动和重新启动自定义 Web 服务器。使用 sub-shell (.travis.yml
):
在后台启动很好
- if [ "$TEST_ADAPTER" = "HTTP" ]; then (vendor/bin/httpd.php start &); fi
再次stop/kill进程我试图获取它的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 脚本)?
以下应该有效:
if [ "$TEST_ADAPTER" = "HTTP" ]; then
vendor/bin/httpd.php&
SERVER_PID=$!
fi
命令周围的()
创建了一个子shell。 $!
在您的示例中为空,因为程序在子 shell 中是 运行,但是您的 $!
在父 [=18] 中是 运行 =].
这里回答问题,因为@xmonk 的回答在功能方面是正确的,但需要一个外部 shell 脚本,而该脚本又需要使用临时文件将 pid 值写入。
我刚刚发现 travis-ci 实际上允许多行语句,这简化了整个事情。把这个放在 .travis.yml
:
- |
if [ "$TEST_ADAPTER" = "HTTP" ]; then
vendor/bin/httpd.php&
SERVER_PID=$!
fi
我需要在 travis 上启动和重新启动自定义 Web 服务器。使用 sub-shell (.travis.yml
):
- if [ "$TEST_ADAPTER" = "HTTP" ]; then (vendor/bin/httpd.php start &); fi
再次stop/kill进程我试图获取它的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 脚本)?
以下应该有效:
if [ "$TEST_ADAPTER" = "HTTP" ]; then
vendor/bin/httpd.php&
SERVER_PID=$!
fi
命令周围的()
创建了一个子shell。 $!
在您的示例中为空,因为程序在子 shell 中是 运行,但是您的 $!
在父 [=18] 中是 运行 =].
这里回答问题,因为@xmonk 的回答在功能方面是正确的,但需要一个外部 shell 脚本,而该脚本又需要使用临时文件将 pid 值写入。
我刚刚发现 travis-ci 实际上允许多行语句,这简化了整个事情。把这个放在 .travis.yml
:
- |
if [ "$TEST_ADAPTER" = "HTTP" ]; then
vendor/bin/httpd.php&
SERVER_PID=$!
fi