【问题标题】: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 &
然后123 进入停止状态,而4 输出到终端并执行。
123 带到前台会恢复它们的执行。

如何在启动状态下在后台执行所有操作?

【问题讨论】:

  • 是否需要选项-c
  • 不@pynexj,它没有。
  • 不管有没有它都不能工作@Cyrus

标签: 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'

【讨论】:

    最近更新 更多