有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Linux中的Java进程状态

在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) 个答案

  1. # 1 楼答案

    要么父线程启动了工作线程,然后进入睡眠状态,要么您正在观察正在执行工作的后台任务。根据this answer,最有可能的5197main线程。您可以通过运行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();
    }