Сигнал SIGINT не может завершить процесс Java с помощью цикла - PullRequest
0 голосов
/ 12 октября 2018

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 я могу уничтожить процесс Java с помощью команды kill -SIGINT <pid>.Что не так с CODE1?ИЛИ Почему java-процесс, выполняющий CODE1, не может быть прерван сигналом SIGINT?

Обратите внимание: я могу завершить весь процесс с помощью команды kill -SIGKILL <pid>.Но мой вопрос относится только к сигналу SIGINT .

...