之前刚开始的时候一切正常,慢慢的当项目运行的次数多了,缓存大了,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。
以上。
参考:
本站由以下主机服务商提供服务支持:
0条评论