抬头仰望星空,是否能发现自己的渺小。

伪斜杠青年

人们总是混淆了欲望和理想

Linux 快速清理 Gradle Task 残留进程

之前刚开始的时候一切正常,慢慢的当项目运行的次数多了,缓存大了,Gradle 慢慢的也开始不好使了,

对于 Gradle 这种基于 jvm 的进程 OOM 是常事儿,但每天下班是刚需啊,到点下班可不能因此耽误了~

那么就使出 Linux 的绝招吧:Terminal我用的 zsh ,所以在 ~/.zshrc 加上了一句:

alias sdn="kill -9 $(ps -ef | pgrep -f 'java') && shutdown now"

需要的时候打开终端,输入 sdn 完事儿了,但前提是得先手动关闭 Android Studio 的项目窗口 !!! 不然代码丢失可就难受了!!!

sdn 不好听,但也懒得取名,shutdown now 缩写了下~

仅清理残余 gradle 进程

在使用的过程中发现,很多时候还是需要手动清理 gradle 进程,原因是已经 OOM 了,但是 Android studio 并没有反应过来,此时需要手动结束进程,但并不需要关闭 Android studio,在观察我的 java 相关进程后发现,AS 的主进程 pid 会小于 10000,而新启动的 gradle 进程都会大于 20000(主进程 pid 最小,后续启动的进程 pid 随机增大),所以此时,命令可以改为( 10000 改为最小的 pid ):

kill -9 $(ps -ef | pgrep -f 'java' | awk '$1 > 10000 {print $1}')

也同样可以进行别名设置:

alias kj="kill -9 $(ps -ef | pgrep -f 'java' | awk '$1 > 10000 {print $1}')"

后续:

发现使用 alias 执行无法杀多个 pid,直接执行却可以,能力有限,原因暂时未知。

2023.3 更新

近期学习了 awk ,针对上述 进程 id 不确定的情况,依据 小进程为最初进程,后续进程均为 gradle task ,所以对 linux 的命令做下迭代,最优查询进程 id 的方法为:

ps -ef | pgrep -f 'java' | awk 'NR>1 {print $0}'

于是最终为:

kill -9 $(ps -ef | pgrep -f 'java' | awk 'NR>1 {print $0}')

原理:ps + grep 操作后输出已为从小到大排序,所有大于第一行的结果都是 需要 kill 的 gradle task。

以上。

参考:

如何监控GPU使用情况并杀死指定其中进程


本站由以下主机服务商提供服务支持:

0条评论

发表评论