首页 > 解决方案 > SIGINT 信号无法用循环终止 java 进程

问题描述

kill -SIGINT <pid>没有用给​​定的特定代码杀死我的 java 进程。Ctrl+C 都不起作用。我有以下java代码。

代码1:

class LoopTest {

    public static void main(String[] args) throws Exception {
        System.out.println("---start---");
        countPrimes();
        System.out.println("---end---");
    }

    public static void countPrimes() {

        for (int i = 2; i < 10000000 ; i++) {
            for (int j = 2; j < i ; j++) {

                    int x = i % j;

            }
        }
    }
}

带有上述代码的 Java 进程运行了很长时间,如果我通过命令杀死这个 Java 进程

kill -SIGINT <pid>

无法终止进程。

但是,如果使用无限循环运行以下代码

代码2:

class LoopTest {

    public static void main(String[] args) throws Exception {
        System.out.println("---start---");
        countPrimes();
        System.out.println("---end---");
    }

    public static void countPrimes() {
        for (int i = 2; true ; i++) {
            for (int j = 2; j < i ; j++) {
                    int x = i % j;
            }
        }
    }
}

或者如果我运行这个简单的代码

代码3:

class LoopTest {

    public static void main(String[] args) throws Exception {
        System.out.println("---start---");
        countPrimes();
        System.out.println("---end---");
    }

    public static void countPrimes() {
        while(true){}
    }
}

对于上面的 CODE2 和 CODE3,我都可以用 command 杀死 java 进程kill -SIGINT <pid>。CODE1 有什么问题?或者为什么运行 CODE1 的 java 进程不能被 SIGINT 信号杀死?

请注意:我可以使用 command 杀死所有进程kill -SIGKILL <pid>。但我的问题是针对SIGINT信号的。

标签: javaloopsprocesskillsigint

解决方案


推荐阅读