启动Gradle守护进程,1个繁忙和6个停止的守护进程无法重用,请使用--status获取详细信息。

72

当我运行gradle clean命令时,我得到了以下信息

启动Gradle守护进程,有1个繁忙和6个停止的守护进程无法重用,请使用--status参数查看详情

为了调查,我运行了以下命令。

$ gradle --status
   PID STATUS   INFO
 11506 BUSY     4.3.1
  8027 STOPPED  (stop command received)
  9347 STOPPED  (stop command received)
 11727 STOPPED  (by user or operating system)
  4786 STOPPED  (by user or operating system)
 14569 STOPPED  (by user or operating system)
 31237 STOPPED  (by user or operating system)

Only Daemons for the current Gradle version are displayed. See https://docs.gradle.org/4.3.1/userguide/gradle_daemon.html#sec:status

所以,我脑海中出现了一些问题。

  1. 如何停止一个正在运行的守护进程?

  2. 如何杀死守护进程?

7个回答

57

停止现有的守护进程:

如果您想出于任何原因明确停止运行中的守护进程,请使用命令gradle --stop

注意:请注意,gradle --stop命令不会停止使用不同版本Gradle运行的守护进程。

如何杀死我的机器上所有的守护进程?

Gradle将杀死任何空闲3小时或更长时间的守护进程,因此您无需手动清理它们。

资源链接:Gradle Daemon Issue Details

因此,命令和输出如下:

$ gradle --stop
Stopping Daemon(s)
2 Daemons stopped

停止守护进程后,状态将如下所示:
$ gradle --status
No Gradle daemons are running.
   PID STATUS   INFO
  8027 STOPPED  (stop command received)
  9347 STOPPED  (stop command received)
 12448 STOPPED  (stop command received)
 11506 STOPPED  (stop command received)
 11727 STOPPED  (by user or operating system)
  4786 STOPPED  (by user or operating system)
 14569 STOPPED  (by user or operating system)
 31237 STOPPED  (by user or operating system)

如果你遇到了gradle构建运行卡住的问题,可以参考这篇文章:Stuck with Gradle Build Running

13
你没有回答隐含的问题,即如何清除在你的计算机上存在的已停止守护进程。在我的Mac机器上,最终会积累成百上千个已停止的守护进程。Gradle需要一个“--purge”命令来清除这些守护进程。 - Stevey
1
@Stevey 感谢您的评论。我已经尝试解决这些问题。这将澄清每个人关心的实际情况。我们都知道,删除.gradle文件夹可以解决所有问题。聪明的人也只会根据版本删除2个文件:~/.gradle/daemon/5.5/registry.bin~/.gradle/daemon/5.5/registry.bin.lock来解决问题。如果有多个版本,则需要多次删除。 - SkyWalker

28

1
如果我删除了哪个文件夹,我可以让它们恢复吗? - user9135351
是的,在 .gradle 下每个文件夹中进行删除将使未来的构建更加清晰。 - Neail
Windows 10系统。对我来说,唯一的解决方案是删除../.gradle/caches/文件夹中的所有内容。 - Variag

5

只需重新启动计算机,然后进入 .gradle 文件夹并删除 daemon 文件夹。


3

我的问题只通过更改Gradle版本得以解决:

App\android\gradle\wrapper\gradle-wrapper.properties

旧版本:distributionUrl=https://services.gradle.org/distributions/gradle-6.7-all.zip
新版本:distributionUrl=https://services.gradle.org/distributions/gradle-6.9-all.zip


1
这是因为每个Gradle版本都会创建一个新文件夹来存储守护进程信息,路径为:/users/[username]/.gradle/daemon您切换到了新版本,因此新的文件夹被创建,但旧文件夹仍然存在繁忙的线程。 - David B.F.
1
这是因为每个Gradle版本都会在/users/[username]/.gradle/daemon中创建一个新文件夹来存储守护进程信息。您切换到了新版本,新文件夹被创建了,但旧的文件夹仍然存在着繁忙的线程。 - undefined

2

对于Linux用户

步骤1: cd ~ && rm -rf .gradle

步骤2: cd <到Flutter工作项目目录>

步骤3: 运行flutter run -v,然后用ctrl+c杀死进程。在/home/<user>/.gradle/wrapper/dists/gradle-<version>-all/9uukhhbclvbegdvsww0j0cr3p路径下将会创建.gradle目录。

步骤4: 在官网下载Gradle Zip版本。

步骤5: 将下载的Gradle复制并粘贴到/home/<user>/.gradle/wrapper/dists/gradle-<version>-all/9uukhhbclvbegdvsww0j0cr3p路径下。

步骤6: 运行flutter run -v

步骤7: 一切正常。


0

只需在您的应用程序 -> Gradle Scripts -> gradle properties中添加两行即可。

org.gradle.daemon=true

org.gradle.parallel=true

1
它如何帮助? - Kanchan Pal

-1

我创建了一个新的Flutter项目,并将以前的数据迁移到了新文件夹,现在它完美地工作了。

祝大家编码愉快...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接