如何启动和停止 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