SIGINT信号无法通过循环终止Java进程

时间:2018-10-12 09:34:14

标签: java loops process kill sigint

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

CODE1:

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>

该进程无法终止。

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

CODE2:

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;
            }
        }
    }
}

或者如果我运行此简单代码

CODE3:

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,我都可以使用命令kill -SIGINT <pid>杀死Java进程。 CODE1有什么问题?或为什么不能用SIGINT信号杀死运行CODE1的Java进程?

请注意:我可以使用命令kill -SIGKILL <pid>终止所有进程。但是我的问题只针对 SIGINT 信号。

0 个答案:

没有答案