我的机器不断使用命令“java”启动进程(在顶部的“命令”列下列出),这些进程会消耗我所有的资源几秒钟,然后消失,几秒钟后一个新的进程会以不同的 PID 启动。
我想知道是什么启动了这些 java 进程。
我从执行 top -> c 中获得了一些信息,它显示了 java 进程完整命令:
11470 尼尔 20 0 4616088 2.134g 19156 S 121.9 57.1 0:04.20 /opt/jdk-11.0.1/bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFr+
但这对我来说没有任何意义。不知道是否有帮助。
其他答案和我已经尝试过的事情:
我看过这个答案我如何才能找到某个进程的起源并永久停止它?其中提到查找 proc/PID 目录。其他几个类似的问题也给出了这个建议。但这对我没有帮助,因为 PID 一直在变化。
我已尝试过ps aux | grep java
,但这仅显示 grep 本身:
neil~$ ps aux | grep java
neil 8539 0.0 0.0 14224 928 pts/19 S+ 22:20 0:00 grep --color=auto java
我已经尝试过 killall java
这确实会终止当前的 PID,但几秒钟后下一个 PID 就会启动……
我原本以为这是因为我安装了 Cisco AnyConnect(请参阅帮助卸载第三方软件)。我之所以这样认为,是因为 a) 问题始于我安装 AnyConnect 时;b) 当我能够在 Java 进程消失之前将其终止时,我看到的唯一受影响的程序是 AnyConnect,它停止了大部分 UI 的渲染。现在我不确定了,因为我卸载了 AnyConnect,但问题仍然存在。
答案1
ps auxf
控制台命令将为您提供进程的简单“树”视图。只需杀死父进程即可。
或者你的情况你最好在 java 之前找到进程:使用ps auxf | grep java -B11
答案2
您可以尝试使用该pstree -p
命令获取有关您尝试追踪的 java 进程的祖先信息。这将转储从 init 开始的进程树的 ASCII 描述,以及这些进程的 PID,并可能为您提供有关不断启动 java 的父进程的信息。
答案3
我建议看看这个pspy
实用程序(来自https://github.com/DominicBreuker/pspy) 将提供有关短暂进程及其尝试访问的文件的更多信息。如果确实如此,这可能会让您确定是什么创建了它们。
答案4
Java 命令被截断为顶部。 你可以试试
ps auf | grep java
列出所有相关进程。完整命令可能会给你一些启发。顺便说一句,该命令将最大堆大小设置为 1Gb,因此它至少不会占用你所有的内存,除非它生成许多进程