Крюк отключения Raspberry Pi Java

У меня есть Raspberry Pi с Java 1.8.0 и файл с именем test.jar. Когда я запускаю код, а затем останавливаю программу с помощью Ctrl + Z, хук выключения не запускается, но когда я запускаю код в Windows и останавливаю его, хук выключения сработает.

Как я могу это исправить, спасибо

public class Test
{
    public static void main(String[] args)
    {
        Runtime.getRuntime().addShutdownHook(new Thread()   //Add shutdown code
        {
            public void run()
            {
                System.out.println("Shutdown");
            }
        });

        while(true) { }
    }
}

person oliverjrose99    schedule 20.09.2014    source источник
comment
Использовать бесконечный цикл в конструкторе - это боль... Попробуйте исключить цикл while в каком-то методе.   -  person xio4    schedule 20.09.2014
comment
Вы пытаетесь нажать Ctrl+C в Rasberry вместо Ctrl+Z?   -  person xio4    schedule 20.09.2014
comment
это работает, спасибо. есть ли что-то особенное в использовании Ctrl+C   -  person oliverjrose99    schedule 20.09.2014


Ответы (1)


В терминале Linux ctrl-z отправляет SIGSTOP процессу переднего плана. Это один из двух сигналов (второй — SIGKILL), которые вы не можете обрабатывать в своем процессе. Это означает, что у java нет возможности запустить какой-либо код в ответ на сигнал.

Однако SIGSTOP в любом случае не завершает процесс, а просто приостанавливает его. Вы можете продолжить его, отправив сигнал SIGCONT, что может быть достигнуто в вашей оболочке с помощью команды fg.

Попробуйте вместо этого использовать ctrl-c для завершения вашей программы, и она должна работать (поскольку вместо этого будет отправлено SIGINT, что можно обработать).

person FatalError    schedule 20.09.2014