【问题标题】:Gradle task launched in background goes into stopped state在后台启动的 Gradle 任务进入停止状态
【发布时间】:2021-04-02 06:39:38
【问题描述】:
我有几个 bash 脚本,它们使用 gradle 包装器执行任务并调用 sbt run。
如果我在后台启动它们,例如
bash -c ./1.sh & bash -c ./2.sh & bash -c ./3.sh & bash -c ./4.sh &
然后1、2 和3 进入停止状态,而4 输出到终端并执行。
将1、2 或3 带到前台会恢复它们的执行。
如何在启动状态下在后台执行所有操作?
【问题讨论】:
标签:
bash
shell
gradle
jobs
【解决方案1】:
这是一个 gradle 特定的问题。似乎 gradle 试图从 stdin 读取,任何试图从控制终端读取的后台进程立即是suspended。
取决于 shell,在 bash 中尝试在后台运行 gradle build 时会得到以下输出:
$ gradle build &
[1] 32305
$
[1]+ Stopped gradle build
在 zsh 中:
$ gradle build &
[1] 31173
$
[1] + 31173 suspended (tty input) gradle build
解决方法是将 /dev/null 重定向到标准输入,这样 gradle 进程就不会从控制终端读取:
$ gradle build </dev/null &
[2] 33139
> Configure project :
hello world
> Task :buildEnvironment
------------------------------------------------------------
Root project 'tmp'
------------------------------------------------------------
classpath
No dependencies
A web-based, searchable dependency report is available by adding the --scan option.
BUILD SUCCESSFUL in 1s
1 actionable task: 1 executed
[2] 33139 done gradle build < /dev/null
PS:我的 gradle.build 文件很简单:
println 'hello, world'