Linux中的Java进程状态

时间:2018-12-24 09:28:59

标签: java linux

在Linux中,许多Java线程状态正在运行,但是它们的线程的父Java进程正在休眠。为什么?

例如,具有pid的Java进程为5197:

[root@ov7-ops-test-99 tmp]# ps -eo pid,s,lwp,command|grep activity
 5197 S  5197 java -jar /opt/work/jenkins/workspace/.......

但状态为pid 5197的线程为:

[root@ov7-ops-test-99 tmp]# ps  -eLo  pid,lwp,s,%cpu,%mem,command|awk '/activity/ {if(index($3,"R")>0){print $1,$2,$3,$4,$8}}'
5197 5303 R 0.4 /opt/work/jenkins/workspace/....
5197 5563 R 0.5 /opt/work/jenkins/workspace/....
5197 7326 R 1.4 /opt/work/jenkins/workspace/....
5197 7330 R 1.4 /opt/work/jenkins/workspace/....
5197 7334 R 1.4 /opt/work/jenkins/workspace/....
5197 7338 R 1.4 /opt/work/jenkins/workspace/....
5197 7339 R 1.4 /opt/work/jenkins/workspace/....
5197 7340 R 1.4 /opt/work/jenkins/workspace/....
5197 7345 R 1.4 /opt/work/jenkins/workspace/....
5197 7346 R 1.4 /opt/work/jenkins/workspace/....
5197 7349 R 1.5 /opt/work/jenkins/workspace/....
5197 7357 R 1.4 /opt/work/jenkins/workspace/....
5197 7360 R 1.4 /opt/work/jenkins/workspace/....
5197 7365 R 1.4 /opt/work/jenkins/workspace/....
5197 7368 R 1.4 /opt/work/jenkins/workspace/....
5197 7369 R 1.4 /opt/work/jenkins/workspace/....
5197 7370 R 1.4 /opt/work/jenkins/workspace/....

1 个答案:

答案 0 :(得分:1)

要么父线程启动了工作线程,然后进入睡眠状态,要么您正在观察后台工作。 5197最有可能是main线程,根据this answer,您可以通过运行jps -v进行确认。

您的示例中没有足够的详细信息。您将必须查看Java线程名称,并将其与Jenkins源代码进行协调。看起来您正在处理Jenkins工作空间中的内部版本,在这种情况下,main可能是代理启动代码,而正在运行的线程可能是工作线程。

以下代码会导致您观察到相同的过程状态:

public static void main(String[] args) throws Exception {
    Thread t1 = new Thread(() -> {
        int i = 0;
        while (true) {
            i++;
        }
    });
    t1.start();
    t1.join();
}