如何在travis上启动和停止后台任务?

and*_*dig 5 shell travis-ci

我需要在travis上启动并重新启动自定义Web服务器.使用子shell(.travis.yml)在后台开始很好:

- if [ "$TEST_ADAPTER" = "HTTP" ]; then (vendor/bin/httpd.php start &); fi
Run Code Online (Sandbox Code Playgroud)

要再次停止/终止进程,我试图获取其PID然后将其杀死:

- if [ "$TEST_ADAPTER" = "HTTP" ]; then (vendor/bin/httpd.php start &) && SERVER_PID=$!; fi
- ...
- if [ "$TEST_ADAPTER" = "HTTP" ]; then kill -9 $SERVER_PID && ...; fi
Run Code Online (Sandbox Code Playgroud)

但是,SERVER_PID是空的.

在travis上获取后台进程的PID以便停止它的正确方法是什么(复杂化:不使用额外的shell脚本)?

and*_*dig 9

这里回答的问题是@ xmonk的答案在功能方面是正确的,但需要一个外部shell脚本 - 反过来 - 需要使用临时文件来写入pid值.

我刚刚发现travis-ci实际上允许多行语句简化了整个过程.把它放进去.travis.yml:

- |
  if [ "$TEST_ADAPTER" = "HTTP" ]; then
    vendor/bin/httpd.php&
    SERVER_PID=$!
  fi
Run Code Online (Sandbox Code Playgroud)


小智 3

以下应该有效:

if [ "$TEST_ADAPTER" = "HTTP" ]; then
    vendor/bin/httpd.php&
    SERVER_PID=$!
fi
Run Code Online (Sandbox Code Playgroud)

围绕()命令创建一个子 shell。在您的示例中,该$!值为空,因为该程序在子 shell 中运行,但您的程序$!在父 shell 上运行。